AMPL (cplex& gurobi):如何实现 'if statement' 作为约束?
AMPL (cplex& gurobi): How to implement 'if statement' as constraint?
我需要将 if 语句作为约束来实现。但是,我的代码不断出错。
'open_house[i]'是二进制变量(1表示'open',0表示'not open')。
'people_to_house[j,i]'也是一个二元变量(如果person-j分配给house-i则为1,否则为0)
我想让'open_house[i]'等于1,如果(在每个房子里)分配到那个房子的人数之和至少为1。换句话说,如果有至少有 1 人被分配到一间房子,然后我们决定打开那间房子。
下面的 AMPL 代码给我一个语法错误。如何在 'subject to' 中编写 if-then 语句?
subject to
if (open {i in house}: sum {j in people} people_to_house[j,i] >= 1) then open_house[i] = 1;
为此您不需要 if-then-else。你可以只需要
people_to_house[j,i] <= open_house[i]
所有 j
和 i
。一旦有人被分配到房屋 i
,这将强制 open_house[i]
为 1。如果可能分配的人数不是太多,您也可以将其制定为大 M 约束:
sum { j in people } people_to_house[j,i] <= M * open_house[i]
(其中M
为人数,即sum { j in people } 1
)
我需要将 if 语句作为约束来实现。但是,我的代码不断出错。
'open_house[i]'是二进制变量(1表示'open',0表示'not open')。
'people_to_house[j,i]'也是一个二元变量(如果person-j分配给house-i则为1,否则为0)
我想让'open_house[i]'等于1,如果(在每个房子里)分配到那个房子的人数之和至少为1。换句话说,如果有至少有 1 人被分配到一间房子,然后我们决定打开那间房子。
下面的 AMPL 代码给我一个语法错误。如何在 'subject to' 中编写 if-then 语句?
subject to
if (open {i in house}: sum {j in people} people_to_house[j,i] >= 1) then open_house[i] = 1;
为此您不需要 if-then-else。你可以只需要
people_to_house[j,i] <= open_house[i]
所有 j
和 i
。一旦有人被分配到房屋 i
,这将强制 open_house[i]
为 1。如果可能分配的人数不是太多,您也可以将其制定为大 M 约束:
sum { j in people } people_to_house[j,i] <= M * open_house[i]
(其中M
为人数,即sum { j in people } 1
)