Scipy

  1. from scipy.optimize import minimize
  2. import numpy as np
  3. e = 1e-10 # 非常接近0的值
  4. fun = lambda x : (x[0] - 0.667) / (x[0] + x[1] + x[2] - 2) # 约束函数
  5. cons = ({'type': 'eq', 'fun': lambda x: x[0] * x[1] * x[2] - 1}, # xyz=1
  6. {'type': 'ineq', 'fun': lambda x: x[0] - e}, # x>=e,即 x > 0
  7. {'type': 'ineq', 'fun': lambda x: x[1] - e},
  8. {'type': 'ineq', 'fun': lambda x: x[2] - e}
  9. )
  10. x0 = np.array((1.0, 1.0, 1.0)) # 设置初始值
  11. res = minimize(fun, x0, method='SLSQP', constraints=cons)
  12. print('最小值:',res.fun)
  13. print('最优解:',res.x)
  14. print('迭代终止是否成功:', res.success)
  15. print('迭代终止原因:', res.message)

启发式算法

见知识库另文,退火算法和遗传算法

其他参考

https://blog.csdn.net/qq_45669448/article/details/104752406
https://blog.csdn.net/hzk427/article/details/104045268