2016-04-05 9 views
-1

Указано here, что SimplexSolver «Определяет поиск по веткам и границам для оптимизации смешанных целых задач». который должен означать, что он находит целочисленное решение для заданной задачи, но находит точное решение с двойными значениями.Force C# SolverFoundation SimplexSolver, чтобы найти решение int

Есть ли способ заставить его найти целочисленное решение или я должен реализовать свою собственную ветку и привязку поверх этих двойных решений?

ответ

1

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

Нет необходимости реализовать B & алгоритм B, просто объявить переменные как целые числа и SimplexSolver должны быть в состоянии решить эту проблему и обеспечить целое число оптимальное решение. См. example here. Соответствующий фрагмент ниже:

SimplexSolver solver = new SimplexSolver(); 

// ... 

for (int i = 0; i < 5; i++) { 
    solver.AddVariable(string.Format("project{0}", i), 
         out chooseProjectX[i]); 
    solver.SetBounds(chooseProjectX[i], 0, 1); 
    solver.SetIntegrality(chooseProjectX[i], true); 
    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    solver.SetCoefficient(profit, chooseProjectX[i], 
         estimatedProfitOfProjectX[i]); 
    solver.SetCoefficient(expenditure, chooseProjectX[i], 
         capitalRequiredForProjectX[i]); 
}