Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python I';我正在使用cvxpy测试一个简单的MILP程序。但是,在我稍微增加变量数量后,解算器停止收敛_Python_Cvxpy - Fatal编程技术网

Python I';我正在使用cvxpy测试一个简单的MILP程序。但是,在我稍微增加变量数量后,解算器停止收敛

Python I';我正在使用cvxpy测试一个简单的MILP程序。但是,在我稍微增加变量数量后,解算器停止收敛,python,cvxpy,Python,Cvxpy,任务是将n个非重叠段放入一个区间,最大化区间内的总覆盖空间。这是一个1D玩具问题,将扩展到未来“将盒子装配到更大的盒子”类问题 间隔定义为[x0,x1]。每个段由起始席和宽度Wi定义。目标函数是在给定一些约束条件下,使所有宽度之和最大化 存在使所有线段保持在间隔内的直接约束,以及线段之间的碰撞约束以避免重叠。碰撞约束使用二进制辅助变量 import cvxpy as cp # Problem set up x0 = 2 x1 = 20 num_segments = 4 # Segment v

任务是将n个非重叠段放入一个区间,最大化区间内的总覆盖空间。这是一个1D玩具问题,将扩展到未来“将盒子装配到更大的盒子”类问题

间隔定义为[x0,x1]。每个段由起始席和宽度Wi定义。目标函数是在给定一些约束条件下,使所有宽度之和最大化

存在使所有线段保持在间隔内的直接约束,以及线段之间的碰撞约束以避免重叠。碰撞约束使用二进制辅助变量

import cvxpy as cp

# Problem set up
x0 = 2
x1 = 20
num_segments = 4

# Segment variables
X = cp.Variable(num_segments) # starting x's
W = cp.Variable(num_segments) # widths

# Constraints keeping segments in interval
constraints = [X + W <= x1, X >= x0, W >=1]

# Pairwise collision constraints
for i in range(num_segments-1):
    for j in range(i+1, num_segments):
        # Helper binary variables
        sigma_r = cp.Variable(boolean=True)
        sigma_l = cp.Variable(boolean=True)
        # segment i can be on the left or the right of segment j
        constraints += [X[i] - W[j] >= X[j]-4000*(1-sigma_r)]
        constraints += [X[i] + W[i] <= X[j]+4000*(1-sigma_l)]
        # require at least one sigma to be 1
        constraints += [sigma_r + sigma_l >= 1]

# maximize sum of widths
objective = cp.Maximize(cp.sum(W))

prob = cp.Problem(objective, constraints)
prob.solve()
将cvxpy作为cp导入
#问题设置
x0=2
x1=20
num_段=4
#段变量
X=cp.Variable(num_段)#开始X
W=cp.Variable(num_段)#宽度
#保持分段间隔的约束
约束=[X+W=x0,W>=1]
#成对碰撞约束
对于范围内的i(num_段-1):
对于范围内的j(i+1,num_段):
#辅助二进制变量
sigma_r=cp.Variable(布尔值=True)
sigma_l=cp.Variable(布尔值=True)
#段i可以位于段j的左侧或右侧
约束+=[X[i]-W[j]>=X[j]-4000*(1-sigma_r)]
约束+=[X[i]+W[i]=1]
#最大化宽度之和
目标=cp.max(cp.sum(W))
prob=cp.问题(目标、约束)
问题解决()
这对于num_段(最多为6个)非常有效,任何超过该值的情况下,解算器都不会收敛。我觉得对于100以下的变量数量,这不应该是一个困难的优化。你知道是什么导致了这个问题吗?我是否应该查看其他解算器?

检查使用的解算器(详细模式)。cvxpy只提供了一个现成的玩具解算器,非商业性的解决方案在安装过程中需要特别小心(参见文档)。检查使用了哪个解算器(详细模式)。cvxpy只提供了一个现成的玩具解决方案,非商业替代方案在安装过程中需要特别小心(参见文档)。