Saltar al contenido

Configuración del solver


AvalonSant

Recommended Posts

publicado

Buenas tardes, estoy tratando de usar el solver por primera vez para que el valor que está en la columna K5 sea el maximo posible, para ello se cambia el valor de la celda K2. De primeras parecia que funcionaba bien pero solo te da valores para K2 cercanos al valor inicial que tenia la celda, por ejemplo si pongo 2 como valor inicial me sale 1,98987... como solucion, si pongo 1,5 me sale como solucion 1,42999....

Yo lo que que quiero es que busque todos los numero por ejemplo del 1 al 10 de 0,01 en 0,01. Pero no se como llegar a configurar eso en el solver.

Gracias y un saludo!

publicado

Buenas a todos, veo que el solver no es una herramienta habitual. Pero realmente nadie puede ayudarme? 

 

Un saludo! 

publicado

Hola,

La verdad es que sin ver el archivo, es complicado dar respuestas.  Es como si dijeras que el coche no te arranca, que tienes una avería, y que te expliquen cómo arreglarlo.

Me temo que si no llevas el coche al taller, va a ser complicado que consigas que vuelva a funcionar.

Saludos,

publicado
hace 16 horas, AvalonSant dijo:

Buenas a todos, veo que el solver no es una herramienta habitual. Pero realmente nadie puede ayudarme? 

Hola, no me lo tome a mal, pero recuerde que en el foro son personas intentando ayudar personas. Tiene que considerar que NO HAY un conocimiento absoluto en todos los temas, ni una respuesta exclusiva acertada, además los tiempos de respuesta dependen en gran medida de la disponibilidad de los miembros o Maestros.

Ahora mismo ha pasado un Maestro a visitar su tema. Del maestro @Victor7 he visto sus aportaciones y es bueno en verdad, por lo que debería tomar en cuenta sus recomendaciones. Si le piden un libro de ejemplo, haga lo posible por mandar un libro de ejemplo, sin él quedan abiertas las ambigüedades.

Sino al final solo quedan como indicaciones que uno puede suponer que le deben servir, por ejemplo así como esta su tema y buscar valores en un rango específico con un paso de 0.01 ¿qué podría hacer?

  • Configure las restricciones: La celda cambiante, Ingresa la referencia a K2. Selecciona ">= " e ingresa el valor mínimo del rango deseado (1)

  • Luego, vuelve a añadir la segunda restricción, selecciona "<= " e ingresa el valor máximo del rango deseado (10)

  • Configurar incremento en el valor de K2: Cambia la variable de la celda", marca la casilla "Reducir/Incrementar valores cambiantes de celda"

  • Configurar el paso de búsqueda: En "opciones" establece la "Tolerancia de Restricción" en (0.01)  para que se exploren todas las soluciones dentro del rango especificado.

  • Ejecutar el Solver

Usted podría decir que uno puede hacer el libro, sólo son dos celdas, K2 y K5, pero tome en cuenta que la idea de lo que busca parte de usted y no de quienes en buena voluntad le intentan ayudar.

Saludos cordiales

 

publicado

@Victor7 Por supuesto, disculpa. Adjunto el excel en cuestión. Pensé que quiza al no tener muhcas opciones el solver era simplemente cambiar X valor. Muchas gracias!

 

@Israel Cassales Gracias por tu respuesta, no encuentro los 2 ultimos pasos, ni "valores cambiantes de celda" ni "tolerancia de restriccion"

 

Saludos!

Maximo_K5.xlsx

publicado

Hola de nuevo,

Sigo sin entender.  En tu desarrollo Solver:

Pides cambiar la celda K3, cuando está en blanco.

Una restricción para I3, celda que también está en blanco.

No sé si te has equivocado de archivo al subirlo, pero no veo el sentido de lo que quieres conseguir.

- - - - - - - - - - - - - - - - - - - - - - -

Veo que tienes en la columna A números cerrados, y la columna B calcula resultados binarios (2 resultados únicos) en algunas ocasiones, y en otras resultados únicos.  Y después una fórmula-cálculo del promedio de las celdas de la columna B (-?-)

Y en H3 una fórmula que apunta a K3, celda que está en blanco (-?-)

- - - - - - - - - - - - - - - - - - - - - - -

Creo que si explicas con todo lujo de detalles qué es lo que esperas conseguir, tal vez pueda buscarse una solución...

Saludos,

publicado

@Victor7

Hay un pequeño lio, porque de tantas pruebas fui modificando todo, y antes de mandar el archivo intente asemejarlo a lo que os preguntaba al inicio del post. 

-La de H3 hace referencia a K2, que lo meti en el solver para a ver si hacia que fuera multiplo de 0,01 el resultado. Entonces la restriccion del solver es ese H3=0 no I3.

-La celda a cambiar sería K2, para que K5 sea maximo.

Lo que hace la columna B, es comparar los valores de la columna A con K2, si K2 es mayor resta el resultado en B es -K1. En cmabio si K2 es menor que A, en B sale K2*K1-K1.

 

Lo que quiero es que al calcular el maximo de K5, coja todos los valores posibles de K2, entre 1 y 10 es suficiente y de 0,01 en 0,01. Ya que como comentaba solo cogia valores proximos al valor inicial que yo daba

publicado

He hecho una simulación, que no sé si te servirá para algo, pero ahí va la imagen:

Solver2.thumb.jpg.b00d40660a08a6e68f81bf3484086a68.jpg

La idea:  Cualquier número con sólo 2 decimales es múltiplo de 0,01.  Partiendo de ese axioma, introduzco como nueva celda de búsqueda N2, en K2 una fórmula para que me la redondee a 2 decimales, y restrinjo únicamente los valores máximo y mínimo de N2.  Con ello deberían cumplirse los objetivos buscados (¿supongo?).

Solver devuelve 1,10804002, como puede verse en la imagen, que redondeado a 1,11, ofrece ese máximo de 0,083504,... que sinceramente, no tengo ninguna sensibilidad sobre si es una cifra que se acerca a lo que estés buscando.

?

Saludos,

publicado

Buenas @Victor7, si tiene sentido el valor de 0,08 como max. He vuelto a hacer pruebas y ahora poniendo cualquier numero inicial tambien me llega a ese 1,11.

No se porqué antes no se movia practicamente del valor inicial.

Una cosa, podrias enseñarme tu configuración del solver? Y una ultima duda, es posible ver por ejemplo el numero que ofrezca el segundo max, en algun registro de iteraciones o algo?

 

Saludos

publicado

Sí; algo mal salió en la foto  de mi anterior post; el Solver queda así:

Establecer objetivo:  $K$5

Para:  Máx

Cambiando las celdas de variables:  $N$2

Sujeto a las restricciones:

$N$2<=10

$N$2>=0,01

y, recordemos, en K2 tiene que introducirse la fórmula:  =REDONDEAR(N2;2)

- - - - - - - - - - - -

Para conocer el 2º máximo, por lo que veo, normalmente será el múltiplo de 0,01 anterior al obtenido (en este caso sería 1,10), pero se me ocurre que puedes lanzar otro Solver, con la restricción $N$2<número anteriormente obtenido.

Saludos,

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
    • Podrías compartir tu solucion
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.