我是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的方式相同。