前提・実現したいこと
当方、プログラミング初心者で教えていただきたいのですが、
現在、VBAで書かれたソルバーのコードを、C#で書き直す作業を行っています。
その際にMicrosoft Solver Foundationを使用しています。
内容的には、セルB2に5 セルB3に2 セルB4にA1/A2の計算式が入っている状態で、
B2の値は1030 B3の値は210 B4の値は2以上とする時、B4が最大になるような答えが出るようにしたいのですが、
エラーを解決することができません。
よろしくお願いいたします。
発生している問題・エラーメッセージ
エラー1 UnsolvableModelException: No solver could be found that can accept the model given the model type and directive(s) エラー2 ModelException: Microsoft.SolverFoundation.Services.SimplexDirective cannot solve CP models. Remove this directive and use a directive that supports the CP capability.
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using Microsoft.SolverFoundation.Common; 7using Microsoft.SolverFoundation.Services; 8using Microsoft.SolverFoundation.Solvers; 9 10namespace solver 11{ 12 class solver_test 13 { 14 15 static void Main(string[] args) 16 { 17 SolverContext context = new SolverContext(); 18 Model model = context.CreateModel(); 19 20 //変数の作成 21 Decision b2 = new Decision(Domain.Integer, "b2"); 22 Decision b3 = new Decision(Domain.Integer, "b3"); 23 Decision b4 = new Decision(Domain.Integer, "b4"); 24 25 //modelに変数を追加 26 model.AddDecision(b2); 27 model.AddDecision(b3); 28 model.AddDecision(b4); 29 30 //制約追加 31 model.AddConstraint("limit1", 10 <= b2 <= 30); 32 model.AddConstraint("limit2", 2 <= b3 <= 10); 33 model.AddConstraint("limit3", 2 <= b4 <= 100); 34 model.AddConstraint("limit4", b2 / b3 <= b4 <= b2 / b3); 35 36 //ゴールの設定 37 model.AddGoal("Goal", GoalKind.Maximize, b4); 38 39 // Solution 40 Solution solution = context.Solve(new SimplexDirective()); 41 Report report = solution.GetReport(); 42 Console.WriteLine(report); 43 } 44 } 45}
試したこと
最初は
model.AddConstraint("limit4", b2 / b3 <= b4 <= b2 / b3);
の部分を
model.AddConstraint("limit4", b2 + b3 <= b4 <= b2 + b3);
のように足し算にしており、動作することは確認できたのですが、計算式に割り算や掛け算が入ると、
エラーが発生します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。