Добавление ограничений с VBA в инструмент решателя - PullRequest
1 голос
/ 06 сентября 2011

Я пытаюсь добавить некоторые новые ограничения в решение Excel VBA Excel и получаю странное поведение при запуске кода. Я хочу сделать следующее для проблемы минимизации, и у меня возникли некоторые проблемы:

Два регулируемых рычага должны быть <= 35%, однако, когда я добавляю ограничение: </p>

SolverAdd CellRef:="$C$39", Relation:=2, FormulaText:=".35"
SolverAdd CellRef:="$C$40", Relation:=2, FormulaText:=".35"

Они автоматически устанавливают себя на уровне 35%, когда идея заключается в том, чтобы они были как можно ниже. Без этого ограничения ячейки устанавливают себя ниже 35% для проблем, с которыми я проверяю, поэтому я знаю, что оптимальное решение ниже 35%.

Также мне было интересно, есть ли способ убедиться, что а) ячейки оптимизированы с шагом 5%, и что конечное значение не включает десятичные дроби. то есть 10,00% вместо 10,23%

Извините за длинный вопрос, я ценю любую помощь, которую я получаю.

Вот полный код:

    Private Sub CommandButton2_Click()

Dim i As Integer


i = 2

For i = 2 To 5

   Range("$C$14").Value = Application.Workbooks("test_model_2.xls").Worksheets("All Models").Cells(i, 2).Value
    SolverReset
    SolverAdd CellRef:="$F$70", Relation:=3, FormulaText:="5000"
    SolverAdd CellRef:="$C$39", Relation:=2, FormulaText:=".35"
    SolverAdd CellRef:="$C$40", Relation:=2, FormulaText:=".35"
    SolverOk SetCell:="$F$70", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$39:$C$40"
    SolverSolve True
   MsgBox "i is:" & i

Next i

End Sub

1 Ответ

2 голосов
/ 06 сентября 2011

См .: http://msdn.microsoft.com/en-us/library/aa272233(v=office.10).aspx

Вы используете отношение: = 2, что равно "=". Вы должны использовать 1 (<=) </p>

Что касается получения вашего решения с точностью до 0,05, просто настройте некоторые другие ячейки, которые вводятся в ячейки "процентов", и ограничьте их целочисленными значениями.

Например:

A1 = 7           (set solver to change this, and constrain to integer)
B1 = A1 * 0.05   (your percent cell, constrain to <=0.35)
...