更改等式左边部分

时间:2017-01-11 12:34:07

标签: c# ms-solver-foundation

我目前正在使用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循环中添加所有这些约束。为此,我创建了一个列表,其中包含左侧的所有部分(因此,一个约束所需的所有flowoverflows)之前和现在我都在尝试类似的东西:

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循环?

0 个答案:

没有答案