sábado, 6 de noviembre de 2010

Sensibilidad de un Forward con Solver

Puede descargar el archivo de Excel siguiente.







No se ve la opción "Convertir variables sin restricciones en no negativas" al grabar la macro


Desde la versión de Excel 2010 en Solver se ha incluido la posibilidad de marcar o dejar sin marcar una casilla de verificación que se denomina "Convertir variables sin restricciones en no negativas".

Para dejar desmarcada esta casilla de verificación desde el código VBA se ha de añadir a la macro la siguiente línea.
  • SolverOptions AssumeNoNeg:=False

Para ver todas las opciones de Solver que se pueden incluir en código VBA ir al siguiente enlace.

La línea de código anterior se puede poner por ejemplo como línea anterior a la que ejecuta Solver al final de la macro.

La línea anterior no aparece al ver el código que ha generado la grabadora de macros, así como no aparecen otras muchas propiedades inherentes al Solver que estamos ejecutando. Por ejemplo, tampoco aparece la precisión que hemos utilizado, entre otras opciones.

Si queremos que aparezcan las opciones utilizadas en Solver, lo que tenemos que hacer mientras grabamos la macro con la grabadora es abrir las Opciones de Solver y luego cerrarlas. Esto nos genera el código necesario que luego si podremos ver. Entre todo este código está el siguiente.
  • AssumeNonNeg:=True

Este código se corresponde con el hecho de no marcar la casilla de verificación de "Convertir variables sin restricciones en no negativas".

Veamos el código que he obtenido al abrir y luego aceptar las Opciones de Solver.

Sub Macro3()
SolverOk SetCell:="$G$6", MaxMinVal:=3, ValueOf:=0, ByChange:="$C$4:$F$4", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOptions MaxTime:=0, Iterations:=0, Precision:=0.0000005, Convergence:= _
    0.0001, StepThru:=False, Scaling:=True, AssumeNonNeg:=True, Derivatives:=1
SolverOptions PopulationSize:=100, RandomSeed:=0, MutationRate:=0.075, Multistart _
    :=False, RequireBounds:=True, MaxSubproblems:=0, MaxIntegerSols:=0, _
    IntTolerance:=0.1, SolveWithout:=False, MaxTimeNoImp:=30
SolverOk SetCell:="$G$6", MaxMinVal:=3, ValueOf:=0, ByChange:="$C$4:$F$4", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$G$6", MaxMinVal:=3, ValueOf:=0, ByChange:="$C$4:$F$4", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
End Sub

SolverFinish KeepFinal:=1

En el vídeo vemos que se añade una línea de código para no tener que estar aceptando la ventana que nos devuelve Solver al final del proceso. En el vídeo se pone en español el siguiente código.

   SolverResolver resultadoDeseado:=True

Si necesitamos ponerlo en inglés podemos cambiarlo por este otro:

   SolverFinish KeepFinal:=1

En el siguiente enlace se comenta este aspecto.

No hay comentarios:

Publicar un comentario en la entrada