Оптимизация функций полезности

624 days ago by kpp

Коэффициенты важности:

a = vector([1, 2, 3/2, 1/2]) 
       

Минимальные потребности:

xmin = vector([2, 3, 4, 5]) 
       

Начальный потребительский набор:

x0 = vector([3, 5, 7, 10]) 
       

Цены:

c = vector([10, 5, 4, 7]) 
       

Бюджет:

g=1000 
       

Функция полезности:

log10 = lambda vec : vector([log(el, 10) for el in vec]) f = lambda x: a*log10(x-xmin) 
       

Начальное значение функции полезности:

f(x0).n(digits = 5) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}1.6672
\newcommand{\Bold}[1]{\mathbf{#1}}1.6672

Ограничения:

constrains = [ lambda p: -xmin[i] + p[i] - 1 for i in range(0, len(xmin)) ] constrains.append( lambda p: g - c * vector(p) ) 
       

Оптимизация:

xres = minimize_constrained(lambda x: -f(x), constrains, x0) 
       

Оптимальный набор:

xres.transpose() 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{r}
20.2800174563 \\
76.1200707009 \\
72.5499340626 \\
18.0571050975
\end{array}\right)
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{r}
20.2800174563 \\
76.1200707009 \\
72.5499340626 \\
18.0571050975
\end{array}\right)

Максимальное значение функции полезности:

f(xres).n(digits = 5) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}8.3020
\newcommand{\Bold}[1]{\mathbf{#1}}8.3020

Потрачено:

c*xres 
       
\newcommand{\Bold}[1]{\mathbf{#1}}1000.0
\newcommand{\Bold}[1]{\mathbf{#1}}1000.0