Я пытаюсь построить задачу оптимизации с двумя переменными, в которых у меня есть целевая функция и 2 функции ограничения, каждая из которых является неравенством.Моя идея состоит в том, чтобы построить одну переменную относительно другой, и кривые будут возможными значениями целевой функции.Линия, которую я хочу построить, представляет собой отношение между двумя переменными (когда ограничение равно нулю).
Функции:
Функция цели
1) 5000- x - y
Ограничения
2) 100 x / (x + 20) + 100 y - 10 x - 10 y - 50 = 0
3) 3000 -x - y> = 0
Я использовал следующий код:
from _future_ import division
from sympy import *
import math
from mpl_toolkits.mplot3d import Axes3D # noqa: F401 unused import
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
import matplotlib.axes as Axes
"----------------------- goal"
def f1(x,y): return 5000 - (x+y)
"----------------------- constrain 1"
def g1(x,y): return 100 x / (x + 20) + 100 y - 10 x - 10 y - 50
"----------------------- constrain2"
def h2(x): return (3000 - x)
fig = plt.figure()
ax = fig.add_subplot(111)
# Make data.
x = np.arange(0,5000, 50)
y = np.arange(0, 5000*16, 50)
x,y = np.meshgrid(x,y)
##### Goal
T = f1(x,y)
ts = ax.contour(x,y,T,15,colors='rebeccapurple')
#ax.clabel(ts, fontsize=8)
##### Constrain 1
E = g1(x,y)
es = ax.contour(mc,mh,E,15,colors='darkcyan')
##### Constrain 2
plt.plot (mc,h2(mc))
plt.rcParams['contour.negative_linestyle'] = ':'
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()
Я попытался добавить ограничения, но вместо одной строки, представляющей y = 3000 - x, я получил много разныхлинии.