CHH3213 / Note-Ubuntu_CHH3213

ubuntu系统CHH3213上做的笔记
0 stars 0 forks source link

41. scipy优化时约束条件书写问题 #41

Open CHH3213 opened 3 years ago

CHH3213 commented 3 years ago

假设有如下的约束条件

def con1(args):
    t_min, t_max, J, W = args # J:6*7, W:6*1
    J = np.array(J)
    W = np.array(W)
    cons = [{'type': 'ineq', 'fun': lambda x: x[0] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[1] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[2] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[3] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[4] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[5] - t_min},
            {'type': 'ineq', 'fun': lambda x: x[6] - t_min},
            {'type': 'ineq', 'fun': lambda x: -x[0] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[1] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[2] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[3] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[4] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[5] + t_max},
            {'type': 'ineq', 'fun': lambda x: -x[6] + t_max},
            {'type': 'eq', 'fun': lambda x: J@x-W}
            ]

    return cons

最后的{'type': 'eq', 'fun': lambda x: J@x-W}也可以写成如下部分:

    # for i in range(6):
    #     j = J[i].reshape((1,7))
    #     con = {'type': 'eq', 'fun': lambda x, i=i: j[0]@x-W[i]}
    #     cons.append(con)