应该算是很简单的非线性规划内容,希望能修改一下或者给出正确的代码。

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
from scipy.optimize import minimize
import numpy as np
#目标函数:

def func(args):
    T,X=args
    m = 0
    i = 1
    while i <= 6:
        m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
    def fun1():
        (333E+15) + m + (85.49E+17)*x[1]
    return fun1()

#约束条件
def con(args):
    x0min,x0max,x1min,x1max = args
    cons = ({'type':'ineq','fun':lambda x:1-x0max},\
           {'type':'ineq','fun':lambda x:x0min},\
           {'type': 'ineq', 'fun': lambda x: 1- x1max},\
           {'type':'ineq','fun':lambda x:x1min})

if __name__ == "__main__":
    args=(T,X)= (10,5)
    args1=(0,1,0,1,)
    cons = con(args1)
    x0= np.array((0.5, 0.5)) #设置初始值
    res=minimize(func(args),x0,method='SLSQP',constraints=cons)

    #求解#
    res = minimize(func(args), x0, method='SLSQP', constraints=cons)
    print(res.fun)
    print(res.success)
    print(res.x)


你的目标函数可能有点问题,按照这个模板自己改下吧,模板的目标函数是1/x0 + x1

from scipy.optimize import minimize
import numpy as np


# 目标函数:

def func():
    def fun1(x):
        # m = 0
        # i = 1
        # while i <= 6:
        #     m = m + x[0] * x[1]
        #     m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
        #     i = i + 1
        # return (333E+15) + m + (85.49E+17) * x[1]
        return 1/x[0] + x[1]

    return fun1


# 约束条件
def con(args):
    x0min, x0max, x1min, x1max = args
    cons = ({'type': 'ineq', 'fun': lambda x: 1 - x0max}, \
            {'type': 'ineq', 'fun': lambda x: x0min}, \
            {'type': 'ineq', 'fun': lambda x: 1 - x1max}, \
            {'type': 'ineq', 'fun': lambda x: x1min})
    return cons


if __name__ == "__main__":
    args = (T, X) = (10, 5)
    args1 = (0, 1, 0, 1,)
    cons = con(args1)
    x0 = np.array((0.5, 0.5))  # 设置初始值

    # 求解#
    res = minimize(func(), x0, method='SLSQP', constraints=cons)
    print(res.fun)
    print(res.success)
    print(res.x)


很明显,你func里的x是一个数组,而你给它的并不是,我假设给一个,你参考一下:

from scipy.optimize import minimize
import numpy as np
#目标函数:
 
def func(args):
    T,x=args #这里的X应该是小写
    m = 0
    i = 1
    while i <= 6:
        m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
    def fun1():
        (333E+15) + m + (85.49E+17)*x[1]
    return fun1()
 
#约束条件
def con(args):
    x0min,x0max,x1min,x1max = args
    cons = ({'type':'ineq','fun':lambda x:1-x0max},\
           {'type':'ineq','fun':lambda x:x0min},\
           {'type': 'ineq', 'fun': lambda x: 1- x1max},\
           {'type':'ineq','fun':lambda x:x1min})
 
if __name__ == "__main__":
    args=(T,X)= (10,[1, 2])  # 注意这里的X应该是一个数组
    args1=(0,1,0,1,)
    cons = con(args1)
    x0= np.array((0.5, 0.5)) #设置初始值
    res=minimize(func(args),x0,method='SLSQP',constraints=cons)
 
    #求解#
    res = minimize(func(args), x0, method='SLSQP', constraints=cons)
    print(res.fun)
    print(res.success)
    print(res.x)

运行即可,数据很大,消耗时间。

如有帮助,请采纳,多谢!

你本身函数存在一定的问题,
1、func ,X就是x?,但是你后面X直接给了int类型,这就导致x[0]报错
2、你的con函数没有返回值,那cons就是None

函数方程和约束条件发下

https://blog.csdn.net/weixin_40796925/article/details/106275133?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-5.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-5.pc_feed_download_top3ask