Как построить линию (функцию) на контурном графике - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь построить задачу оптимизации с двумя переменными, в которых у меня есть целевая функция и 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, я получил много разныхлинии.

...