1

かなり複雑な状況を解決するために Microsoft Solver Foundation 2 を使用しようとしていますが、可能な限りモデルを縮小しても UnsupportedModelException が発生します。
誰かが私が間違っていることを知っていますか?
以下は、問題のある動作を再現するために必要な最小限の例です。

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 + b a <= someValue の形式でいくつかの制約を含める必要があることを考慮してください。そのため、最終的に実行したいことがサポートされていない場合は、事前にお知らせください。その場合は、使用できる.NETフレンドリーなインターフェイスを備えた他のソルバーの提案もいただければ幸いです(よく知られている商用パッケージのみでお願いします)。

前もって感謝します

4

2 に答える 2

3

制約で決定を使用する前に、決定をモデルに追加する必要があると思います。決定を作成した後にこの行を追加すると、コードが機能します。

model.AddDecisions(decisionA, decisionB, decisionC);

ネイサン

于 2010-05-10T15:34:23.080 に答える
1

このリンクからソースを取得して試してください(いくつかのModel.Absがあります)。それが死んだ場合は、セットアップに問題があり、最短の解決策は、アンインストール、再起動、および再インストールすることです。

http://geekswithblogs.net/cyoung/archive/2009/02/25/129672.aspx

さて、二次制約について言及したので、少なくともExpressバージョンはそれらを確実にサポートしていません。

http://code.msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=2756

エンタープライズバージョンは可能性がありますが、$$$$の費用がかかります-「アカデミックエンタープライズ」を入手した場合でも、Gurobiソルバーがないため、お金から離れることを考える前に、具体的な質問を送信することをお勧めします(http://gurobi.com/)そして、彼らがそれを処理すると言ったが、そうではない場合に備えて、いくつかの保証を求めます。

于 2010-08-02T08:44:23.987 に答える