es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de maximización con restricciones en R.

Tengo un problema de maximización bajo ciertas restricciones.
Tengo 3 jugadores diferentes en una cadena. Cada uno debe “anunciar” una cantidad (x) de (e) para consumir. Todos tienen la misma función de utilidad que es u(x) = sqrt(x).
Ahora quiero maximizar la suma de todas las u(x) (jugador 1, jugador 2 y jugador 3). Sin embargo, la elección de x para el jugador 2 depende de la elección del jugador 1, y la elección del jugador 3 depende de la elección del jugador 2 (y, por lo tanto, indirectamente, de la elección del jugador 1). (Como ejemplo: el jugador 1 tiene e=3 pero elige x=2, ahora el jugador 2 tiene x=2 + la diferencia entre x1 y e1, en este caso 1)

Por lo tanto, las siguientes restricciones:

x1<=e1

x1+x2<=e1+e2

x1+x2+x3<=e1+e2+e3-x1-x2

y

x1+x2+x3=sum(e)

con todos los e: 0<=e<=10 (e es un número aleatorio generado entre 0 y 10)

Como ejemplo:

e1=4, e2=1, e3=2, e4=1

En este caso, para maximizar la suma de u(x)=sqrt(x), el jugador 1 anunciará x1=2, lo que dará sqrt(2)=1.41 y por lo tanto envía 2 unidades a lo largo de la cadena.

El jugador 2 ahora se enfrenta a: x2<=e1+e2-x1 => x2<=4+1-2 y elegirá x2=2 para maximizar la suma de u(x)=sqrt(x) y, por lo tanto, enviará 1 unidad a lo largo de la cadena.

El jugador 3 luego se enfrentará a x3=e1+e2+e3-x1-x2 => x3<=4+1+2-2-2 y elegirá x3=2 y enviará 1 unidad a lo largo de la cadena.

En este punto, el jugador 4 no tiene ninguna elección, pero para el entendimiento: el jugador 4 se enfrenta a x4<=e1+e2+e3+e4-x1-x2-x3 => x4<=4+1+2+1-2-2-2 y elegirá x4=2.

La parte complicada para mí es que la elección del siguiente jugador depende de la elección del jugador anterior y realmente estoy teniendo dificultades con la programación de esto.
¿Alguna idea de cómo maximizar u(x) dada este problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema de maximización, podemos utilizar la función optim() en R. Sin embargo, debido a las restricciones e interdependencia de las elecciones de los jugadores, necesitamos definir una función de optimización personalizada que tenga en cuenta las restricciones.

    Así es como podemos definir la función de optimización personalizada:

    “`{r}
    u <- function(x) sqrt(x) # función de utilidad

    custom_optim <- function(x, e) {
    x1 <- x[1]
    x2 <- x[2]
    x3 <- x[3]

    # comprobar si se cumplen las restricciones
    if (x1 > e[1]) return(Inf)
    if (x1 + x2 > e[1] + e[2]) return(Inf)
    if (x1 + x2 + x3 > e[1] + e[2] + e[3] – x1 – x2) return(Inf)

    # calcular la utilidad total
    utilidad_total <- u(x1) + u(x2) + u(x3)

    # devolver la utilidad total negativa para maximizar
    return(-utilidad_total)
    }


    La función `custom_optim()` toma como entrada el vector `x`, que contiene las elecciones de los jugadores 1, 2 y 3 respectivamente. También toma como entrada el vector `e`, que contiene las cantidades anunciadas de `e` de cada jugador. La función primero verifica si las elecciones cumplen las restricciones. Si no es así, devuelve `Inf` (ya que queremos minimizar la utilidad negativa, esto excluye efectivamente las elecciones inválidas de consideración). Si se cumplen las restricciones, la función calcula la utilidad total como la suma de las raíces cuadradas de las elecciones de cada jugador, y devuelve la utilidad total negativa (ya que queremos maximizar la suma de las raíces cuadradas). Luego podemos usar la función `optim()` para encontrar las elecciones óptimas de `x`: ```{r} e <- c(4, 1, 2) resultado <- optim(fn = custom_optim, par = c(1, 1, 1), e = e, method = "L-BFGS-B", lower = c(0, 0, 0), upper = c(e[1], e[2], e[3])) resultado$par # elecciones óptimas de x

    En este ejemplo, las elecciones óptimas de x son c(2, 2, 1), lo que corresponde a una utilidad total de u(2) + u(2) + u(1) = 2.83 + 2.83 + 1 = 6.66.

Comments are closed.