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);
誰でもこれを行う方法を提案できますか? ありがとう!