【问题标题】:How to formulate x != y in lpsolve?如何在 lpsolve 中制定 x != y?
【发布时间】:2015-06-01 08:37:10
【问题描述】:

我试图说明变量 x,y,z 必须全部不同,并且它们只接受值 1、2 或 3(这当然是一个玩具示例):

min: x+y+z;

1 <= x <= 3;
1 <= y <= 3;
1 <= z <= 3;

但要完成这项工作,我仍然需要访问布尔运算符或 != 运算符,这在 lpsolve 中似乎不存在!我该怎么办?我想这样做:

x != y;
x != z;
y != z;

谢谢

编辑:

这是我当前的代码:

/* Objective function */
min: 1;

/* Variable bounds */
1 <= x1 <= 4;
1 <= x2 <= 4;
1 <= x3 <= 4;
1 <= x4 <= 4;


x1 + x2 + x3 + x4 = 10;

x1 < x2;
x2 < x3;
x3 < x4;

int x1;
int x2;
int x3;
int x4;

lpsolve 结果给了我:

x1 = 1
x2 = 3
x3 = 3
x4 = 3

这是错误的。为什么?

【问题讨论】:

  • 你不能强制x&lt;yy&lt;z吗?
  • 我想过,但“和”似乎不起作用:(
  • 当然可以,你只需添加两个约束,约束总是相互“和”
  • 这甚至是有效的约束格式吗?我希望它想要x1 - x2 &lt;= -1

标签: linear-programming lpsolve


【解决方案1】:

总的来说,我同意 Michael Laffargue 的观点,即在 lpSolve 中不可能有像 a &lt; b 这样的真实 a,b 的东西。但是对于整数表达式来说就有点不同了。

也许我们可以从一个更简化的问题开始。 让我们考虑两个整数变量 x 和 y 以及一个常数 M 使得 1 &lt;= x &lt;= M and 1&lt;=y&lt;=M。 如果 x 和 y 可能不相等,则 x>y 或 y>x。但由于两者都是整数只有一个以下不等式成立

x+1 <= y
y+1 <= x

我们可以通过引入一个二元变量 r 来强制上述不等式中只有一个成立,这样对于 x,y, r 下列不等式成立 both

(i)   x+1 <= y+ Mr
(ii)  y+1 <= x+M-Mr

因为如果r=0(i) x+1 &lt;=y 和(ii) 是微不足道的,但如果r=1(ii) y+1 &lt;= x 和(i) 微不足道。

当我们现在将上述解决方案应用于 OP 问题时,我们可以为 OP 问题和M=4 中的所有变量对构建一个具有不等式 (i) 和 (ii) 的线性程序:

/* Objective function */
min: 1;

/* Variable bounds */
1 <= x1 <= 4;
1 <= x2 <= 4;
1 <= x3 <= 4;
1 <= x4 <= 4;
r_12 <= 1;
r_13 <= 1;
r_14 <= 1;
r_23 <= 1;
r_24 <= 1;
r_34 <= 1;

/* This is done automatically because all x1,..,x4 are different
   x1 + x2 + x3 + x4 = 10;
*/

/*  Apply (i) and (ii) to all pairs of x1,..x4
(i)  x+1 <= y + Mr
(ii) y+1 <= x + M-Mr
*/

x1 + 1 <= x2 + 4 r_12;
x2 + 1 <= x1 + 4 - 4 r_12;

x1 + 1 <= x3 + 4 r_13;
x3 + 1 <= x1 + 4 - 4 r_13;

x1 + 1 <= x4 + 4 r_14;
x4 + 1 <= x4 + 4 - 4 r_14;

x2 + 1 <= x3 +  4 r_23;
x3 + 1 <= x2 + 4 - 4 r_23;

x2 + 1 <= x4 + 4 r_24;
x4 + 1 <= x2 + 4 - 4 r_24;

x3 + 1 <= x4 + 4 r_34;
x4 + 1 <= x3 + 4 - 4 r_34;

/*
x1 < x2;
x2 < x3;
x3 < x4;
*/

int r_12;
int r_13;
int r_14;
int r_23;
int r_24;
int r_34;
int x1;
int x2;
int x3;
int x4;

解决上面的 MILP 会呈现一个所有 x1,..,x4 不同的解决方案:

x1=3
x2=1
x3=2
x4=4

【讨论】:

  • 此外,上述解决方案可以扩展到非整数变量。假设变量xy(不相等,而是有界)可以从建模问题中推导出有一个常数C &gt;0 s.t。 x+C &lt;=yy+C &lt;=x 持有
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多