Microsoft Solver Foundationの制約
-
04-10-2019 - |
質問
Microsoft Solver Foundation 2を使用してかなり複雑な状況を解決しようとしていますが、モデルをできるだけ馬鹿にしても、サポートされていないModelexceptionにこだわっています。
誰かが私が間違っていることについて考えを持っていますか?
以下は、問題のある動作を再現するために必要な最も少ない例です。
var ctx = SolverContext.GetContext();
var model = ctx.CreateModel();
var someConstant = 1337.0;
var decisionA = new Decision(Domain.Real, "decisionA");
var decisionB = new Decision(Domain.Real, "decisionB");
var decisionC = new Decision(Domain.Real, "decisionC");
model.AddConstraint("ca", decisionA <= someConstant);
model.AddConstraint("cb", decisionB <= someConstant);
model.AddConstraint("cc", decisionC <= someConstant);
model.AddConstraint("mainConstraint", Model.Equal(Model.Sum(Model.Abs(decisionA), decisionB, decisionC), someConstant))
model.AddDecisions(decisionA, decisionB, decisionC);
model.AddGoal("myComplicatedGoal", GoalKind.Minimize, decisionC);
var solution = ctx.Solve();
solution.GetReport().WriteTo(Console.Out);
Console.ReadKey();
私の実際のモデルには、完了したら、a+ba <= somevalueなので、最終的にサポートされていない場合は、事前にお知らせください。もしそうなら、私は使用できる.NETフレンドリーなインターフェイスを備えた他のソルバーの提案にも感謝します(よく知られている商用パッケージのみをお願いします)。
前もって感謝します
解決
このリンクからソースをつかんで試してみてください(いくつかのModel.ABSがあります)。それが死んだ場合、セットアップに何か問題があり、最短ソリューションはアンインストール、再起動、再インストールすることです。
http://geekswithblogs.net/cyoung/archive/2009/02/25/129672.aspx
わかりました、今、あなたは二次制約について言及したので、少なくともエクスプレスバージョンは間違いなくそれらをサポートしていません:
http://code.msdn.microsoft.com/solverfoundation/thread/view.aspx?threadid=2756
エンタープライズバージョンは$$$$を費やす可能性があります - 「アカデミックエンタープライズ」を手に入れた場合、それはまだグルビソルバーがないので、お金から別れを考える前に、特定の質問を送るのは良いことです( http://gurobi.com/ )そして、彼らがそれがそれを処理するだろうと言った場合に備えて、いくらかの保証を求めますが、そうではありません。
他のヒント
制約でそれらを使用する前に、モデルに決定を追加する必要があると思います。決定を作成した後にこの行を追加すると、コードが私のために機能します。
model.AddDecisions(decisionA, decisionB, decisionC);
ネイサン