0

現在、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今、これらすべての制約をループに追加しようとしています。そのために、以前に左側のすべての部分を含むリストを作成しました(つまり、 all flowoverflowおよびs1つの制約に必要です)。今は次のようなことをしようとしています:

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ループが 1 つだけになるようにするにはどうすればよいですか?

4

0 に答える 0