如何在放大器中同时解决两个子问题并在下一次迭代中将结果作为输入

时间:2019-07-05 11:28:55

标签: loops ampl

我是ampl的新手,我想同时分别解决线性编程中的两个子问题,然后检查其目标函数(z)是否为负,并在下一步中将其值用作输入,不同约束并重复所有这些操作,直到z为正。

我正在使用的求解器是gurobi

### SUBPROBLEM_1 sub1.mod###

param m;
param n;
param c{1..n};
param b{1..m};
param a{1..m,1..n};

var x{1..n}>=0;

minimize z: sum{j in 1..n}c[j]*x[j];
subject to restr{i in 1..m}:
           sum{j in 1..n}a[i,j]*x[j]<=b[i];

### sub1.dat ###

param n := 2;
param m := 2;
param c := 1 -90 2 -80;
param b := 1 12 2 10;
param a :  1  2 :=
       1  3  1
       2  2  1;

### sub1.run ###

model sub1.mod;
data  sub1.dat;

option solver gurobi_ampl;
solve;
display z, x;

这个子问题给我z = -800,这是正确的,并且与解决子问题2的方式相同。

0 个答案:

没有答案