Ограничение перехода Джулии из вектора

#julia #linear-programming #julia-jump #linear-optimization

Вопрос:

Я тренируюсь с Джулией, но застрял, пытаясь создать ограничение.

 # Server Costs

> df_custos = DataFrame(C1=[2,4,3],C2=[1,2,1],C3=[3,3,2],C4=[6,2,3],)

# City num

> num_cidades=ncol(df_custos)

# Server num 

> num_servidores = nrow(df_custos)

# Server demand

> df_demanda = [100, 120, 80, 200]

# Model -----------------------------------------------

> model_s = Model(Cbc.Optimizer)

# X[i,j] where i = Server and j=City

> @variable(model_s,
> x[i=1:num_servidores,j=1:num_cidades],Int,lower_bound=0)

# Objetive as costs[i.j]*x[i,j]

> @objective(model_s, Min, sum(df_custos[i,j]*x[i,j] for
> i=1:num_servidores,j=1:num_cidades))

# Sum(x[i,j])==df_demanda

> @constraint(model_s,[j=1:num_cidades], sum(x[i,j] for
> i=1:num_servidores) .>= df_demanda

)

> print(model_s)
 

Проблема в том, что когда я печатаю модель, я получаю это:

введите описание изображения здесь

Когда я ожидаю только 4 повторных запроса по требованию, по одному для каждого города, например:

х11 х21 х31 == 100

x12 x22 x32 == 120

х13 х23 х33 == 80

х14 х24 х34 == 200

Как я могу отредактировать ограничение, чтобы сделать его правильным?

Ответ №1:

Понял, но не так, как я думал: я просто поменял @constrain петлю на петлю с правой стороны сужения.

 for i_r=1:length(df_demanda)
    
print(df_demanda[i_r])
    
@constraint(model_s,[j=i_r],sum(x[i,j] for i=1:num_servidores) >=df_demanda[i_r])

end
 

Ответ №2:

Ты хочешь:

 @constraint(model_s,[j=1:num_cidades], sum(x[:,j]) >= df_demanda[j])
 

Это добавит num_cidades дополнительные ограничения

Комментарии:

1. Спасибо за ваш ответ, но у меня все еще возникают проблемы. Код, который вы создали, выдает мне ошибку «Ошибка метода: нет метода, соответствующего нулю(::Тип{Вектор{Int64}})», и если я изменюсь @constraint(model_s,[j=1:num_cidades], sum(x[:,j]) .>= df_demanda) , у меня будет та же ошибка. Я нашел решение, но не такое, как ожидал…. еще раз спасибо!

2. Это должно быть на RHS: ` >= df_demanda[j]` вот почему я попросил вас исправить шрифты — было трудно разобраться, какая переменная какая