.zpl 格式的 SCIP 中的通用参数 table
General parameter table in SCIP in .zpl-format
我正在尝试用 SCIP 和 .zpl 格式求解以下线性规划:
其中 c、p 和 A 的定义如下:
我已经想出办法解决了:
param n := 1000;
set N := {1 .. n};
param c[<i> in N] := i/n ;
var p[<i> in N] real >= 0;
set A := N * N;
set O := {<i,j> in A with i < j};
set D := {<i,j> in A with i == j};
set U := {<i,j> in A with i > j};
param a[<i,j> in O] := 0;
param b[<i,j> in D] := i;
param g[<i,j> in U] := 1;
maximize prob: sum <i> in N : c[i] * p[i];
subto cond2:
forall <i> in N do
sum <j> in N with i>= j do
if(i ==j) then b[i,j] * p[j]
else g[i,j] * p[j] end <= 1 ;
对于矩阵A,我将3种情况(上三角为0,对角线为i,下三角为1)细分为三个参数,即参数a,b和g。
我想知道是否有更优雅的解决方案,将所有三种情况都放在一个参数中,所以对于最后的条件,我基本上可以只对一个参数求和。
你可以这样定义一个函数:
defnumb v(i,j) := if i < j then 0 else if i == j then i else 1 end end;
之后,您可以重写约束:
subto cond2:
forall <i> in N do
sum <j> in N with i>= j do v(i,j) * p[j] <= 1;
我希望这足够优雅。
最好的,
雅各布
我正在尝试用 SCIP 和 .zpl 格式求解以下线性规划:
其中 c、p 和 A 的定义如下:
我已经想出办法解决了:
param n := 1000;
set N := {1 .. n};
param c[<i> in N] := i/n ;
var p[<i> in N] real >= 0;
set A := N * N;
set O := {<i,j> in A with i < j};
set D := {<i,j> in A with i == j};
set U := {<i,j> in A with i > j};
param a[<i,j> in O] := 0;
param b[<i,j> in D] := i;
param g[<i,j> in U] := 1;
maximize prob: sum <i> in N : c[i] * p[i];
subto cond2:
forall <i> in N do
sum <j> in N with i>= j do
if(i ==j) then b[i,j] * p[j]
else g[i,j] * p[j] end <= 1 ;
对于矩阵A,我将3种情况(上三角为0,对角线为i,下三角为1)细分为三个参数,即参数a,b和g。
我想知道是否有更优雅的解决方案,将所有三种情况都放在一个参数中,所以对于最后的条件,我基本上可以只对一个参数求和。
你可以这样定义一个函数:
defnumb v(i,j) := if i < j then 0 else if i == j then i else 1 end end;
之后,您可以重写约束:
subto cond2:
forall <i> in N do
sum <j> in N with i>= j do v(i,j) * p[j] <= 1;
我希望这足够优雅。
最好的, 雅各布