julia jump:声明带有可变上下限的数组

问题描述

我正在尝试使用 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])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...