【发布时间】:2018-10-12 20:47:22
【问题描述】:
我正在尝试使用 optimize.minimize 最大化一个函数,但由于某种原因没有给我正确的答案。
import numpy as np
import pandas as pd
import math
from scipy.optimize import minimize
import matplotlib.pyplot as plt
eps = 0.001
def safe_log(x):
if x > eps:
return math.log(x)
logeps = np.log(eps)
a = 1 / (3 * eps * (3 * logeps * eps)**2)
b = eps * (1 - 3 * logeps)
return a * (x - b)**3
def funct(x):
return -(( (1 - 0.45192566) * safe_log( 1 - x )) + ( 0.45192566 * safe_log( 1 + ((5.5 - 1)*x) )))
cons = ({'type': 'ineq', 'fun': lambda x: x-1})
bnds = ((0, None),)
res = minimize(funct, (0), constraints=cons, bounds=bnds)
print("res", res.x)
print("mes", res.message)
x = []
y = []
for i in range(0, 100):
x.append(i/100)
y.append(funct(i/100))
pass
plt.plot(x,y)
plt.show()
计算出的答案是 1。
如果我绘制函数,则可以在图片中看到清晰的最小值
我已经被这个问题困扰了几天了,我找不到答案。
【问题讨论】:
-
请贴出运行代码sn-p,运行时重现错误。我们无法运行它。
-
这个约束到底是怎么回事?
-
你的代码不好。只需复制粘贴它并尝试运行它。你能运行它吗?如果没有,那么编辑它。我收到
IndexError: SLSQP Error: the length of bounds is not compatible with that of x0. -
对不起,我的坏人,现在它正在工作。第一次在这里发帖,以后不会再发了。
-
现在这正在工作,请考虑 (a) 删除此问题或 (b) 发布问题的答案,详细说明您是如何解决的。