Agregar restricciones con VBA a la herramienta Solver
Pregunta
Estoy tratando de agregar algunas nuevas limitaciones a mi solución de solucionador de Excel VBA y estoy obteniendo un comportamiento extraño cuando ejecuto el código. Quiero hacer lo siguiente para un problema de minimización y tengo algunos problemas:
Las dos palancas que se están ajustando deben ser <= 35%, sin embargo, cuando agrego la restricción:
SolverAdd CellRef:="$C$39", Relation:=2, FormulaText:=".35"
SolverAdd CellRef:="$C$40", Relation:=2, FormulaText:=".35"
Se establecen automáticamente al 35% cuando la idea es que estos sean lo más bajos posible. Sin esta restricción, las celdas se establecen por debajo del 35% para los problemas con los que estoy valido, por lo que sé que la solución óptima está por debajo del 35%.
También me preguntaba si hay una manera de asegurarme de que a) las células estén optimizadas en incrementos del 5%, y que el valor final no incluya decimales. es decir, 10.00% en lugar de 10.23%
Perdón por la larga pregunta, agradezco cualquier ayuda que obtenga.
Aquí está el código completo:
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
Solución
Ver: http://msdn.microsoft.com/en-us/library/aa272233(v=office.10).aspx
Estás usando la relación: = 2, que equivale a "=". Deberías estar usando 1 (<=)
En cuanto a obtener su solución al 0.05 más cercano, simplemente configure algunas otras celdas que alimenten las células "porcentuales" y las limiten a los valores enteros.
P.ej:
A1 = 7 (set solver to change this, and constrain to integer)
B1 = A1 * 0.05 (your percent cell, constrain to <=0.35)