如何在 Zimpl 中定义边割集?
How to define edge cutsets in Zimpl?
- 考虑一个有向图
G=(V, A)
,其中 V = V_1 \cup V_2
是顶点集,A
是有向弧集。
- 让
\alpha(W, W') = {(u,v) | u \in W \land v \in W'}
。这是从 W
到 W'
. 的一组弧
- 对于每个圆弧
(u,v) \in A
,都有一个关联变量x_{(u,v)}
- 现在,我想创建一个约束:
\forall S \subset V: \sum_{(u,v) \in \alpha(V_1, V_2)} x_{(u,v)} \geq 2.
我的问题是如何在 Zimpl 中定义 \alpha
函数?从它的文档(在http://zimpl.zib.de/download/zimpl.pdf),一个函数的参数只能是一个数字或一个字符串。
您可以将 alpha 定义为 A 与 (W x W') 的交集。 ZIMPL 中提供了所有这些集合操作。
多亏了Leon的提示,我找到了解决办法:
set PV[] := powerset(V);
set KV := indexset(PV);
# print out all arcs in \alpha
do forall <k> in KV with card(PV[k]) > 0 do
print (A inter ((V - PV[k]) * PV[k]));
- 考虑一个有向图
G=(V, A)
,其中V = V_1 \cup V_2
是顶点集,A
是有向弧集。 - 让
\alpha(W, W') = {(u,v) | u \in W \land v \in W'}
。这是从W
到W'
. 的一组弧
- 对于每个圆弧
(u,v) \in A
,都有一个关联变量x_{(u,v)}
- 现在,我想创建一个约束:
\forall S \subset V: \sum_{(u,v) \in \alpha(V_1, V_2)} x_{(u,v)} \geq 2.
我的问题是如何在 Zimpl 中定义 \alpha
函数?从它的文档(在http://zimpl.zib.de/download/zimpl.pdf),一个函数的参数只能是一个数字或一个字符串。
您可以将 alpha 定义为 A 与 (W x W') 的交集。 ZIMPL 中提供了所有这些集合操作。
多亏了Leon的提示,我找到了解决办法:
set PV[] := powerset(V);
set KV := indexset(PV);
# print out all arcs in \alpha
do forall <k> in KV with card(PV[k]) > 0 do
print (A inter ((V - PV[k]) * PV[k]));