опенолвер игнорирует пустые регулируемые ячейки в диапазоне - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь оптимизировать матрицу очень большой матрицы, чтобы получить наименьшую сумму с помощью OpenSolver.

Значения в этой матрице являются произведением значений в двух других совпадающих матрицах. Одна матрица - это значение расстояния, другая - матрица объема потока, которую я настраиваю. У меня также есть два ограничения, но они не важны для моего вопроса.

Так как это очень большая матрица, я хочу настроить только соответствующие ячейки (с ячейками «0»). Если я использую всю матрицу в качестве настраиваемого диапазона, то СКОРОСТИ слишком много переменных. Я пытался использовать «.SpecialCells (xlCellTypeConstants, 23)» для создания диапазона только ячеек со значениями, но OpenSolver пытается назвать этот диапазон и не удается.

В основном: Есть ли способ для мне получить OpenOffice, чтобы иметь переменный диапазон, который будет регулировать только те ячейки, которые имеют значения?

'Only use the cells that have values as decision variables
'Otherwise, solver would try to change all the cells, which would take a long time
Set decisionVariables = t_matrix_rng.SpecialCells(xlCellTypeConstants, 23)


'Reset the solver and set the model sheet
OpenSolver.ResetModel Sheet:=cost_matrix_sht

'Objective Definition
OpenSolver.SetObjectiveFunctionCell costValue_rng, Sheet:=cost_matrix_sht
OpenSolver.SetObjectiveSense MinimiseObjective, Sheet:=cost_matrix_sht

'Variables Definition
'The cells in t_matrix which should be changed
**'This fails, since OpenSolver can't name the non-contiguous range**
OpenSolver.SetDecisionVariables decisionVariables, Sheet:=cost_matrix_sht

'Constraints Definition
'TWP constraints
OpenSolver.AddConstraint twp_total_tonnes, RelationEQ, twp_total_tonnes_constraint, Sheet:=cost_matrix_sht
'Elevator constraints
OpenSolver.AddConstraint elevators_total_tonnes, RelationEQ, elevators_total_tonnes_constraint, Sheet:=cost_matrix_sht

enter image description here

...