繁体   English   中英

Microsoft Solver Foundation-如何使用函数作为约束?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM