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]

所有 ji。一旦有人被分配到房屋 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