1

Я пытаюсь использовать Microsoft Solver Foundation 2 для решения довольно сложной ситуации, однако я придерживаюсь UnsupportedModelException, даже когда я как можно глубже отказываюсь от модели.
Есть ли у кого-нибудь представление о том, что я делаю неправильно?
Ниже приведен минимальный пример, необходимый для воспроизведения проблемного поведения.Ограничение Microsoft Solver Foundation

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(); 

Пожалуйста, обратите внимание, что моя текущая модель должна включать в себя, после завершения несколько ограничений в виде а + б < = SomeValue, так что если что я готов сделать, в конечном счете, не пожалуйста, сообщите мне заранее. Если это так, я бы также оценил предложение какого-либо другого решателя с .NET-совместимым интерфейсом, который я мог бы использовать (только для известных коммерческих пакетов).

Заранее спасибо

ответ

1

Захват источника, из этой ссылке и попробовать (у него есть несколько Model.Abs). Если он умирает, что-то не так с вашей установкой, и самым коротким решением является удаление, перезагрузка и переустановка.

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

ОК, теперь, когда вы упомянули квадратичные ограничения, по крайней мере Экспресс версия определенно dosn't поддерживает их:

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

Enterprise версия может, но он стоит $$$$ - если вы получили «Академическое предприятие», он все еще не имеет решения Gurobi, поэтому, прежде чем думать о том, чтобы расстаться с вашими деньгами, было бы полезно отправить им конкретные вопросы (http://gurobi.com/) и попросить некоторую гарантию в случае, если они скажут, что справятся с этим, но это не так.

+0

Этот код работает корректно, но, к сожалению, это не полностью устраняет мою проблему. Я думаю, что проблемы, которые я испытываю, находятся на уровне моделирования (похоже, что SFS не может решить мою проблему, как я сформулировал, или я не использую ее правильно). Поскольку проблема, которую я решаю, требует квадратичных ограничений - это уже разложенная версия проблемы, которая исходит из системы квартирных уравнений - мне либо нужен способ использования квадратичных ограничений, либо трюк моделирования. – em70

1

Я думаю, вам нужно добавить решения модели, прежде чем использовать их в ограничениях. Если добавить эту строку после создания решений ваш код работает для меня:

model.AddDecisions(decisionA, decisionB, decisionC); 

Натан

+0

Мой плохой, вы совершенно правы, однако, как только я пытаюсь ввести любое ограничение, включающее умножение/возведение/абсолютное значение решений, я снова получаю это исключение. Чтобы воспроизвести вещь, вы можете просто заменить decisionA на Model.Abs (решениеA) в вызове Model.Sum. – em70