问题描述
我正在尝试使用 Julia (JUMP) 解决敏感性分析。我遇到了以下问题:
我正在尝试声明一个具有上限和下限的变量,以将其提供给 lp_objective_perturbation_range 函数。该函数需要一个数组的引用作为输入。
我尝试了以下语法:
# Lösung Aufgabe 1
println("Lösung Aufgabe 1")
# Produktionsplan auf Grundlage der Ausgangswerte
println("Produktionsplan auf Grundlage der Ausgangswerte")
produktionsplanModell = Model(with_optimizer(GLPK.Optimizer))
# Bereits angefallene Fixkosten
# Modenschau - 8.100.000 USD
# Designer - 860.000 USD
fixkosten = 8100000 + 860000
c = [33.75; 66.25; 26.625; 210; 22; 136; 60.5; 53.5; 143.25; 110; 155.25]
A = [ 0 0 0 0 0 2 0 0 1.5 2 1.5;
0.5 1.5 0 0 0 0 0 0 0 0 0;
0 0 0 1.5 0 0 0 0 0 0 0;
0 0 0 0 1.5 3 0 0 0 0 0;
0 0 0 0 0 0 1.5 0.5 0 0 0;
0 0 1.5 0 0 0 0 0 2 0 0;
0 0 0 0 0 0 0 0 0 3 2.5;]
b = [28000.0; 30000; 9000; 20000; 18000; 30000; 45000]
w = [60000.0;15000;20000; 4000; 6000; 5500; 9000;15000;15000; 7000; 5000]
y = [0.0; 0; 0; 0; 0; 0; 0; 0; 2800; 4200; 3000]
# DeFinition der Variablen
@variable(produktionsplanModell,w[i] >= x[i] >= y[i] for i=1:11)
不幸的是,这不起作用。所以我需要一个具有以下定义并且可以分配给模型的数组:
@variable(produktionsplanModell,60000 >= x1 >= 0)
@variable(produktionsplanModell,15000 >= x2 >= 0)
@variable(produktionsplanModell,20000 >= x3 >= 0)
@variable(produktionsplanModell,4000 >= x4 >= 0)
@variable(produktionsplanModell,6000 >= x5 >= 0)
@variable(produktionsplanModell,5500 >= x6 >= 0)
@variable(produktionsplanModell,9000 >= x7 >= 0)
@variable(produktionsplanModell,15000 >= x8 >= 0)
@variable(produktionsplanModell,15000 >= x9 >= 2800)
@variable(produktionsplanModell,7000 >= x10 >= 4200)
@variable(produktionsplanModell,5000 >= x11 >= 3000)
可以这样做吗?程序的其余部分工作正常。提前致谢!
解决方法
正确的语法是:
@variable(produktionsplanModell,y[i] <= x[i=1:11] <= w[i] )
因此你需要定义循环inside变量声明。
当然另一个选择是:
@variable(produktionsplanModell,x[1:11] )
for i in 1:11
@constraint(produktionsplanModell,w[i] <= x[i] <= y[i])
end
,
谢谢。 我这样做,它工作正常......
@variable(produktionsplanModell,x[1:11])
for i=1:11
set_lower_bound(x[i],y[i])
set_upper_bound(x[i],w[i])
end
因为我的限制看起来像那样。
@constraint(produktionsplanModell,constraint[j=1:7],sum( A[j,i]*x[i] for i=1:11 ) <= b[j])