1

C# で Microsoft Solver Foundation を使用して問題の解決策を見つけようとしていますが、必要なすべての制約を設定するのに問題があります。私の基本的なモデルは、ベイのリストがあり、すべてのベイの合計が最大になるように各ベイをロードする必要があるというものです。現在こんな感じでやってます

var solver = SolverContext.GetContext();
var model = solver.CreateModel();
var decisions = 
    bays.Select(b => new Decision(Domain.IntegerNonnegative, "B"+b.bay.getShortName()));
model.AddDecisions(decisions.ToArray());

foreach (BayPositionLoading bay in bays)
{
    model.AddConstraint(
            "B" + bay.bay.getShortName() + "Cons",
            model.Decisions
                 .First(d => d.Name == "B" + bay.bay.getShortName()) <= bay.bay.maxLoad);
}

私が本当にできるようにしたいのは、特定の関数が true を返すという制約を追加することです。関数は次のようになります

public bool isValid (List<Bay> bays)
{
    return blah;
}

しかし、この関数に渡すベイのリストを作成する方法がわかりません。次のようなことをしたいのですが、ToDouble または GetDouble と言うと例外がスローされ続けます。

foreach(Bay b in bays)
{
    var dec= model.Decisions.First(it => it.Name == "B" + bay.bay.getShortName());
    b.actualLoad = dec.ToDouble(); // Or GetDouble
}
model.AddConstraint("func", isValid(bays) == true);

誰でもこれを行う方法を提案できますか? ありがとう!

4

1 に答える 1