我正在尝试使用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);
有谁能建议如何做到这一点? 谢谢!
答案 0 :(得分:0)
您只需要使用OML语言提供的数学,我不认为MSF支持您尝试使用的自定义函数。