【问题标题】:optimize.minimize in Python not finding the solutionPython中的optimize.minimize没有找到解决方案
【发布时间】: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) 发布问题的答案,详细说明您是如何解决的。

标签: python scipy


【解决方案1】:

您已将 x 限制为至少 1:

cons = ({'type': 'ineq', 'fun': lambda x: x-1})

SciPy 已根据您的界限和约束成功地最小化您的目标函数。根据这些界限和约束,最小值出现在 x=1 处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2016-07-23
    • 1970-01-01
    • 2022-08-15
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多