python - Python中的optimize.minimize没有找到解决方案
问题描述
我正在尝试使用 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。
如果我绘制函数,则有一个清晰的最小值,如图所示
我已经坚持了几天了,我找不到答案。
解决方案
您已将您限制x
为至少 1:
cons = ({'type': 'ineq', 'fun': lambda x: x-1})
SciPy 已成功地根据您的界限和约束最小化您的目标函数。受限于这些界限和约束,最小值出现在 x=1 处。
推荐阅读
- maven - Selenium-TestNG-Maven - 获取“java.lang.NoClassDefFoundError:org/openqa/selenium/firefox/FirefoxDriver”
- json - JSON 在 Ruby 中通过 TCP 发送后不再可解析
- go - 映射具体类型
- angular - 在 Angular 中未指定确切链接的路由
- java - 从用于 FirebaseAuth 的 onCompleteListener 开始一个片段?
- java - JavaFX-任务中的新阶段
- c - 如何通过 UART 将消息从我的 BLE 微控制器发送到 RF 模块?
- angular - Angular 2+:使用 mat-slide-toggle 测试表单 - 更改事件不会触发
- javascript - p5.js mousePressed 第一次迭代后停止
- matlab - cvpartition 和 crossvalind 有什么区别