【问题标题】:docplex "Error: Model has non-convex objective:"docplex“错误:模型具有非凸目标:”
【发布时间】:2021-12-30 10:38:42
【问题描述】:

我想解决 phyton 中的混合整数非线性规划问题。我使用您在下面看到的代码。我遇到了这个错误:

错误:模型具有非凸目标:x_1_2 * distanceofclusters_1_2 + ...

我该如何解决这个问题?如我所见,我的模型使用二次规划。如果问题是由这个引起的,我该如何改变我的优化模型的方法?

    from docplex.mp.model import Model
    m = Model(name='opt')
    cx = m.continuous_var_list(n+1,name="cx", lb=0)
    cy = m.continuous_var_list(n+1,name="cy", lb=0)
    x = m.binary_var_matrix(n+1,n+1, name="x")
    y = m.binary_var_matrix(n+1,a+1, name="y")
    dis = m.continuous_var_matrix(n+1,a+1, name="distanceofindividual", lb=0)
    dist = m.continuous_var_matrix(n+1,n+1, name="distanceofclusters", lb=0)
    #m.add_constraint(sum(x[i, j] for i in C for j in C if i!=j)>=5, ctname="const1")
    m.set_objective("min", sum(x[i,j]*dist[i,j] for i in C for j in C if i!=j)+sum(y[i,aa]*dis[i,aa] for i in C for aa in V))
    m.add_constraints(dis[i,aa]== m.abs(px[aa]-cx[i]) + m.abs(py[aa]-cy[i]) for i in C for aa in V)
    m.add_constraints(dist[i,aa]== m.abs(cx[aa]-cx[i]) + m.abs(cy[aa]-cy[i]) for i in C for aa in C)
    m.add_constraints(m.sum(x[i,j] for i in C if i!=j)==1 for j in C)

【问题讨论】:

    标签: python cplex nonlinear-optimization docplex


    【解决方案1】:

    你可以做的就是把你的二次目标变成一个线性目标。

    instance你可以写

    from docplex.mp.model import Model
    mdl = Model(name='mutiply binary by decision variable')
    
    b = mdl.binary_var(name='b')
    x = mdl.integer_var(name='x',lb=0,ub=10)
    
    bx= mdl.integer_var(name='bx')
    
    mdl.maximize(x)
    
    mdl.add(bx<=7)
    
    mdl.add(mdl.if_then((b==0),(bx==0)))
    mdl.add(mdl.if_then((b==1),(bx==x)))
    
    mdl.solve()
    
    decisionVars=[b,x]
    
    for v in decisionVars:
        print(v.name," = ",v.solution_value)
    

    如果你需要将决策变量 b 和 x 相乘

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多