[英]Microsoft Solver Foundation - how to use function as constraint?
我正在嘗試使用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);
誰能建議如何做到這一點? 謝謝!
您只需要使用OML語言提供的數學運算,我認為MSF不支持您嘗試使用的自定義函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.