Я пишу код, в котором мне нужно 3 разных вектора входа. Код ниже:
import numpy as np
y = [2, 100, 1000,10000]
alp = [0.9, 0.9, 0.9,0.9]
bet = [0.8, 0.8, 0.8,0.9]
def diff(x, i, n):
pp = 0 # poor poor
pr = 0 # poor rich
rr = 0 # so on...
rp = 0
for j in range(len(y)):
if i < n and j < n: # when i is poor and j is poor
b = (np.maximum(y[i] - y[j], 0))
pp += b
elif i < n and j >= n: # when i is poor and j is rich
c = (np.maximum(y[i] + x[1] - (1 - x[1]) * y[j], 0))
pr += c
elif i >= n and j >= n: # i rich and j rich
d = (np.maximum((1 - x[1]) * y[i] - (1 - x[1]) * y[j], 0))
rr += d
elif i >= n and j < n: # i rich j poor
e = (np.maximum((1 - x[1]) * y[i] - (x[0] + y[j]), 0))
rp += e
return pp + pr + rr + rp
def main(x, n):
r = 0
p = 0
for i in range(len(y)):
if i < n:
r += -1 * ((1 - x[1]) * y[i] - (alp[i] / (len(y) - 1)) * diff(x, i, n) + (bet[i] / (len(y) - 1)) * diff(x,
i,
n))
else:
p += -1 * (y[i] + x[1] - (alp[i] / (len(y) - 1)) * diff(x, i, n) + (bet[i] / (len(y) - 1)) * diff(x, i, n))
print(r+p)
return r + p
def tax_rev(n):
r = 0
for i in range(n, len(y)):
r += y[i]
return r
bounds = [(0, np.inf), (0, 1)]
mat = np.zeros((len(y), 4))
for i in range(len(y)):
def constraint1(x):
return x[1] * tax_rev(i) - x[0] * (i)
cons1 = {'type': 'ineq', 'fun': constraint1}
def co(x):
return main(x, i)
max = optimize.shgo(co, bounds=bounds, constraints=cons1)
mat[i, 0] = '{0:.10f}'.format(max.x[0])
mat[i, 1] = '{0:.10f}'.format(max.x[1])
mat[i, 2] = '{0:.10f}'.format(max.fun)
mat[i,3]= max.success
print(mat[1:])
Код выше по существу принимает y, alp и bet в качестве векторов входа и оптимизации функции. Код работает, и я хочу создать интерфейс с Tkinter, с помощью которого я могу взять в качестве входных данных 3 вектора любой (но равной) длины и решить ту же задачу, что и код выше. Я изо всех сил пытаюсь получить входные данные. Входные данные должны быть списками или векторами. Вот что у меня есть до сих пор:
from scipy import optimize
import numpy as np
root = tk.Tk()
canvas1 = tk.Canvas(root, width=400, height=300)
canvas1.pack()
y=[]
alp=[]
bet=[]
entry1 = tk.Entry(root)
entry2 = tk.Entry(root)
entry3 = tk.Entry(root)
y=y.append(entry1)
alp=alp.append(entry2)
bet=bet.append(entry3)
canvas1.create_window(200, 140, window=entry1)
canvas1.create_window(0, 140, window=entry2)
canvas1.create_window(400, 140, window=entry3)
y=entry2.get()
alp=entry1.get()
bet=entry3.get()
print(y)
def diff(x, i, n):
pp = 0 # poor poor
pr = 0 # poor rich
rr = 0 # so on...
rp = 0
for j in range(len(y)):
if i < n and j < n: # when i is poor and j is poor
b = (np.maximum(y[i] - y[j], 0))
pp += b
elif i < n and j >= n: # when i is poor and j is rich
c = (np.maximum(y[i] + x[1] - (1 - x[1]) * y[j], 0))
pr += c
elif i >= n and j >= n: # i rich and j rich
d = (np.maximum((1 - x[1]) * y[i] - (1 - x[1]) * y[j], 0))
rr += d
elif i >= n and j < n: # i rich j poor
e = (np.maximum((1 - x[1]) * y[i] - (x[0] + y[j]), 0))
rp += e
return pp + pr + rr + rp
def main(x, n):
r = 0
p = 0
for i in range(len(y)):
if i < n:
r += -1 * ((1 - x[1]) * y[i] - (alp[i] / (len(y) - 1)) * diff(x, i, n) + (bet[i] / (len(y) - 1)) * diff(x,
i,
n))
else:
p += -1 * (y[i] + x[1] - (alp[i] / (len(y) - 1)) * diff(x, i, n) + (bet[i] / (len(y) - 1)) * diff(x, i, n))
print(r+p)
return r + p
def tax_rev(n):
r = 0
for i in range(n, len(y)):
r += y[i]
return r
bounds = [(0, np.inf), (0, 1)]
def answer():
mat = np.zeros((len(y), 4))
for i in range(len(y)):
def constraint1(x):
return x[1] * tax_rev(i) - x[0] * (i)
cons1 = {'type': 'ineq', 'fun': constraint1}
def co(x):
return main(x, i)
max = optimize.shgo(co, bounds=bounds, constraints=cons1)
mat[i, 0] = '{0:.10f}'.format(max.x[0])
mat[i, 1] = '{0:.10f}'.format(max.x[1])
mat[i, 2] = '{0:.10f}'.format(max.fun)
mat[i, 3] = max.success
label1 = tk.Label(root, text=mat[2,2])
canvas1.create_window(200, 230, window=label1)
button1 = tk.Button(text='Get the answer', command=answer)
canvas1.create_window(200, 180, window=button1)
root.mainloop()
Этот код вообще не работает. Когда вы запускаете его, он показывает 3 поля ввода. Начиная слева, это y, alp и bet (как в первом фрагменте кода). Я думаю, что записи не сохраняются в виде списка, поэтому он не работает. Может быть, по какой-то другой причине. Поскольку я новичок ie, любая помощь и комментарии по моему коду приветствуются.