我目前正在使用 MS-Solver-Foundation 求解线性方程组。我能够用它解决问题,我现在正试图让它更具动态性(这样我就不必在每次问题发生变化时都更改代码)。
我有多个类型的约束:
model.AddConstraint("bottleneck_1", flow[0] + flow[3] + flow[5] + flow[6] + flow[8] + flow[11] + s + overflow[0] == Cmin[0]);
model.AddConstraint("bottleneck_2", flow[1] + flow[2] + flow[4] + s + overflow[1] == Cmin[1]);
flow[i]
和overflow[i]
在哪里Decision
(类型类的所以)。现在我试图在一个for
循环中添加所有这些约束。为此,我创建了一个列表,其中包含左侧的所有部分(所以全部flow
,overflow
并且s
需要一个约束),现在我正在尝试执行以下操作:
for (int i = 0; i < Bottelnecknumber; i++)
{
model.AddConstraint("bottleneck_" + i, sum(Bottelneck[i]) == Cmin[i]);
}
失败了。我也尝试使用SumTermBuilder
:
List<SumTermBuilder> Bottelneck = new List<SumTermBuilder>();
for (int i = 0; i < Bottelnecknumber; i++)
{
Bottelneck.Add( new SumTermBuilder(0));
Bottelneck[i].Add(s);
Bottelneck[i].Add(overflow[i]);
}
for(int i = 0; i < routenumber; i++)
{
for(int j = 0; j < Bottelnecknumber; j++)
{
if (Route[i].uses[Bottelneckplace[j]])
{
Bottelneck[i].Add(flow[i]);
}
}
}
for (int i = 0; i < Bottelnecknumber; i++)
{
model.AddConstraint("bottleneck_" + i, Bottelneck[i].Equals(Cmin[i]));
}
但这也失败了,因为我得到了所有的解决方案 0,这是不对的。
我现在的问题是:如何在不手动写下约束的情况下在方程的左侧创建这个总和,这样我只需要一个for
循环?