我正在开发一个模型来使用 gurobi 和 python 解决 MIP 问题。该问题涉及一组预定义路线的行驶时间。我试图实现的目标函数之一是最小化所选路线的最大旅行时间。其数学表示为: min f = max(Dij * Zij)
其中 D 是每条路线 ij 的行程时间,Z 是指示路线 ij 是否是解决方案的一部分的赋值变量,因此如果不选择该路线那么表达式的计算结果为 0。在 Gurobi 中为 python 建模的最佳方法是什么?
我正在研究调度优化问题,其中我们有一组需要在特定时间范围内完成的任务。
每个任务都有一个时间表,指定可以执行该任务的时间段列表。每个任务的时间表可能因工作日而异。
这是小样本(减少了任务和时间段的数量):
task_availability_map = {
"T1" : [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T2" : [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T3" : [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T4" : [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个带有整数约束的 LP,我想使用 Python 以精确算术求解它。其实我只需要一个可行点。
编辑:“精确算术”这里指的是无界枚举数和分母的有理数。
之前的尝试:
ImportError: libqsopt_ex.so.2: cannot open shared object file: No such file or directory,尽管据我所知,我给出了该库的路径。速度只是一个中等问题。我的较大实例有大约 500 个带有框约束的变量和 40 个等式,但涉及的数量可能很大。
我正在尝试解决一个具有超过 45.000 个二进制变量和约 350.000 个约束的大规模线性整数优化问题 (MILP)。
我正在使用Pulp来解决问题,但我无法在合理的时间内找到解决方案。
有什么方法可以大大加快优化过程吗?例如:
我想知道如何使用 or-tools 定义复杂的目标函数(如果可能的话)。
下面的基本示例展示了如何使用 python 中的 Or-tools 解决基本线性问题:
solver = pywraplp.Solver('lp_pricing_problem', pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
# Define variables with a range from 0 to 1000.
x = solver.NumVar(0, 1000, 'Variable_x')
y = solver.NumVar(0, 1000, 'Variable_y')
# Define some constraints.
solver.Add(x >= 17)
solver.Add(x <= 147)
solver.Add(y >= 61)
solver.Add(y <= 93)
# Minimize 0.5*x + 2*y
objective = solver.Objective()
objective.SetCoefficient(x, 0.5)
objective.SetCoefficient(y, 2)
objective.SetMinimization()
status = solver.Solve()
# Print the solution
if status == solver.OPTIMAL:
print("x: {}, y: {}".format(x.solution_value(), y.solution_value())) # x: 17.0, …Run Code Online (Sandbox Code Playgroud) python linear-programming least-squares or-tools objective-function
我正在寻找一个优化库.我的两个要求是它不使用JNI,并且它没有许可证限制,因此无法在商业上在多台计算机上使用它.我发现的唯一符合这些要求的是Choco,但是它有点无人驾驶.
我已将问题(表格布局算法)减少到以下问题:
想象一下,我有N个变量X 1,X 2,...,X ñ.我也有一些(未确定的)不等式,例如:
X 1 > = 2
x 2 + X 3 > = 13
等
每个不等式是一个或多个变量的总和,并且始终使用> =运算符将其与常量进行比较.我不能事先说出每次会有多少不等式,但所有变量都必须是非负的,所以每个变量已经是一个.
如何以这种方式解决这个系统,变量的值尽可能小?
补充:阅读维基百科文章并意识到我忘了提到变量必须是整数.猜猜这让NP很难,是吧?
我在RStudio中使用lpsolveAPI.当我键入具有很少决策变量的模型的名称时,我可以读取模型中当前约束的打印输出.例如
> lprec
Model name:
COLONE COLTWO COLTHREE COLFOUR
Minimize 1 3 6.24 0.1
THISROW 0 78.26 0 2.9 >= 92.3
THATROW 0.24 0 11.31 0 <= 14.8
LASTROW 12.68 0 0.08 0.9 >= 4
Type Real Real Real Real
Upper Inf Inf Inf 48.98
Lower 28.6 0 0 18
Run Code Online (Sandbox Code Playgroud)
但是当我创建一个包含9个以上决策变量的模型时,它不再提供完整的摘要,而是我看到:
> lprec
Model name:
a linear program with 13 decision variables and 258 constraints
Run Code Online (Sandbox Code Playgroud)
当有大量决策变量时,有谁知道我怎么能看到模型的相同详细摘要?
奖金问题:RStudio是使用R的最佳控制台吗?
这是一个例子:
>lprec <- make.lp(0,5)
Run Code Online (Sandbox Code Playgroud)
这使得一个名为lprec的新模型具有0个约束和5个变量.即使你现在叫这个名字你也会得到:
>lprec
Model name:
C1 C2 C3 C4 C5 …Run Code Online (Sandbox Code Playgroud) 如何将以下Python PuLP语句简化为Pythonic,可管理和正确的内容:
import pulp as lp
#delare variables
#Note that I have to model a 100 year period!
year_1 = lp.LpVariable("2011", 0, None, lp.LpInteger)
year_2 = lp.LpVariable("2012", 0, None, lp.LpInteger)
year_. = lp.LpVariable("201.", 0, None, lp.LpInteger)
year_n = lp.LpVariable("201n", 0, None, lp.LpInteger)
#declare constraints
prob += year_1 - year_0 >= 0
prob += year_2 - year_1 >= 0
prob += year_. - year_. >= 0
prob += year_n - year_n_1 >= 0
Run Code Online (Sandbox Code Playgroud) 匈牙利算法是否有扩展功能,可以满足每个工人的多个工作分配要求?该算法以其最简单的形式将单个作业分配给单个工人。
我的应用程序是一个利润最大化的问题,有3个工人和180个工作岗位。我还将添加约束(每个工人最少分配50个工作)。
我已经使用Python中的mungres库成功实现了匈牙利算法,效果很好。我只是在努力寻找与每个工人的多个任务相关的文献。
https://pypi.python.org/pypi/munkres
https://zh.wikipedia.org/wiki/匈牙利语算法
https://zh.wikipedia.org/wiki/Generalized_assignment_problem
我尝试了注释中列出的标准numpy方法,但无法将其扩展到每个工作人员多个分配。如果我的矩阵是矩形(即3个工人和4个工作),则仅将前3个工作分配给工人。我还尝试添加虚拟变量以创建方矩阵,但是随后将作业分配给了这些虚拟工,而不是实际工