标签: linear-programming

MILP BigM :变量必须保持在定义的边界内或设置为 0

我正在通过 MILP / Pyomo 对一些能源系统进行建模。

在这种情况下,我正在对双向电子进行建模。转换器。

功率/能量可以以两种方式流动:但是,在一种方式中,功率 P 只能在边界 [LB;UB] 内,否则它必须为 0。

我使用这个公式来确保:

LB - P <= LB * x

P <= UB * (1 - x)

x 是二元变量

它似乎正在发挥作用......

换句话说,功率 P 只能在 [-UB;-LB] 范围内,否则为 0。但我正在努力确保这一点,我只是无法获得构建这种约束背后的逻辑。 。

任何帮助和解释将不胜感激。

非常感谢,马克斯

linear-programming pyomo

1
推荐指数
1
解决办法
126
查看次数

通过 PuLP 最大化决策变量的标准差

我是 PuLP 的新手,正在尝试将标准差编程为优化问题中的目标函数。我已阅读此答案,尽管我知道它是相关的,但无法将其应用于我的具体情况。

我正在尝试解决以下优化问题:最大化一组 3 个决策变量的标准差,其相关权重向量为 [0.25、0.40 和 0.35]。我的限制是每个决策变量的范围应在 0.5 到 2.0 之间。(这是一个简化的示例;实际上,我将拥有更大的决策变量集和更大的相应权重向量)。

到目前为止,我的代码如下:

from pulp import LpMaximize, LpProblem, LpVariable

# Create the model
model = LpProblem(name="max_stdev", sense=LpMaximize)

# Define the decision variables
x = {i: LpVariable(name=f"x{i}", lowBound=0.5, upBound=2.0) for i in range(3)}

# Add the constraints to the model
model += (0.25*x[0] + 0.40*x[1] + 0.35*x[2] == 1, "weight_constraint")

# Add the objective function to the model, which should be the standard deviation of the x vector …
Run Code Online (Sandbox Code Playgroud)

python math linear-programming pulp

1
推荐指数
1
解决办法
236
查看次数

在 R 中绘制不等式

我在 R 中遇到问题,非常感谢您的帮助。

我必须针对以下约束绘制可行性区域:

constrains:
5*x + 3*y >=  210
x + y <= 110
4*x + y <= 200
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我还需要为可行的区域着色。

plot r linear-programming

0
推荐指数
1
解决办法
5364
查看次数

Pyomo(GLPK、Windows)在“results.yml”中向我显示了奇怪的结果

使用 Pyomo 5.1.1(Windows 7 上的 CPython 2.7.10),我尝试执行最简单的 Pyomo 示例,具体模型见https://software.sandia.gov/downloads/pub/pyomo/PyomoOnlineDocs。 html#_a_simple_concrete_pyomo_model

from __future__ import division
from pyomo.environ import *
model = ConcreteModel()
model.x = Var([1,2], domain=NonNegativeReals)
model.OBJ = Objective(expr = 2*model.x[1] + 3*model.x[2])
model.Constraint1 = Constraint(expr = 3*model.x[1] + 4*model.x[2] >= 1)
Run Code Online (Sandbox Code Playgroud)

我执行:

> pyomo solve Pyomo_concrete_v1.py --solver=glpk
Run Code Online (Sandbox Code Playgroud)

根据我自己的计算,结果应该是:

x[1]=0
x[2]=0.25
OBJ=0.75
Run Code Online (Sandbox Code Playgroud)

但是,我发现以下“results.yml”:

# ----------------------------------------------------------
#   Problem Information
# ----------------------------------------------------------
Problem: 
- Name: unknown
  Lower bound: 0.666666666667
  Upper bound: 0.666666666667
  Number of objectives: 1
  Number of constraints: 2
  Number of …
Run Code Online (Sandbox Code Playgroud)

python mathematical-optimization linear-programming glpk pyomo

0
推荐指数
1
解决办法
823
查看次数

内点法(路径跟随)与单纯形法

这两种LP方法的优缺点是什么?
我只能想到内点法中的较少迭代(当 LPP 足够大时)。

linear-programming

0
推荐指数
1
解决办法
1092
查看次数

我可以在 PuLP 中制作 Min Z = max(a,b,c)

我想知道我是否可以在PuLP 中创建一个多目标函数,通过这样做我可以在PuLP 中创建一个 Min Z = max(a,b,c),但是在使用此代码时

    ilp_prob = pulp.LpProblem("Miniimize Problem", pulp.LpMinimize)
    x = []
    if m >3:
        return 1,1
    for i in range(m):
        temp = []
        for j in range(len(jobs)):
            temp += [pulp.LpVariable("x_%s_%s" %((i+1),(j+1)),0,1, cat = 'Binary')]
        x+= [temp]
    ilp_prob += max([pulp.lpSum([jobs[j]*x[i][j] for j in range(len(jobs))] for i in range(m))])
    for i in range(len(jobs)):
         ilp_prob += pulp.lpSum([x[j][i] for j in range(m)])==1 
    ilp_prob.solve()
Run Code Online (Sandbox Code Playgroud)

它只返回 x[0] 中的所有 1,以及 x[0] 中的所有 0。

python mathematical-optimization linear-programming pulp

0
推荐指数
1
解决办法
1748
查看次数

Python - 无法解决LP

我一直在尝试用 Python 解决以下线性问题:

minimize{x1,x2}, such that:
x1+2*x2 = 2
2*x1+3*x2 =2
x1+x2=1
x1>=0
x2>=0
Run Code Online (Sandbox Code Playgroud)

我已经尝试过纸浆和 linprog 库 ( from scipy.optimize import linprog),但我什么也没有。第一点是,这两个库都希望我输入某种“目标函数”来最小化,而我希望将我的变量最小化(本质上是为了验证我没有无限多的解决方案)。但是,我尝试最小化以下目标函数:

x1 + x2

判断这几乎等于最小化 x1 和 x2,因为它们都大于 0。第二点是纸浆和 linprog 似乎都无法处理“不可行”的情况。这意味着当这两个库遇到不可行的问题时,它们不会打印出相关的内容(即:“问题无法解决”),而是开始放弃约束,直到得到答案。例如,上述问题是不可行的,因为不存在满足上述所有方程的数 x1 和 x2。现在 linprog 在这种情况下打印出以下内容

message: 'Optimization terminated successfully.'
Run Code Online (Sandbox Code Playgroud)

x: array([ 0.,  0.])
Run Code Online (Sandbox Code Playgroud)

从中我了解到解决方案是x1 = 0和x2 = 0,这当然是不正确的。

我的下一步是用嵌套的 for 循环和条件语句自己编写所有代码来描述约束,但我还不想去那里。此外,我正在寻找一个可以轻松推广的解决方案,比如 100 多个不同的方程(因为我将在实数的 n 维空间中进行操作)和 60 多个变量(x1,x2,..., x60)。

python linear-programming scipy

0
推荐指数
1
解决办法
788
查看次数

具有动态约束的 Python Pulp 线性规划

我目前使用 Excel 中的 Solver 来寻找制造的最佳解决方案。这是当前的设置: 在此输入图像描述

它涉及在旋转机器上制造鞋子,也就是说,生产是分批重复进行的。例如,一批为“10x A1”(参见表中的 A1),这将产生 10x 尺寸 36、20x 尺寸 37...10x 尺寸 41。

有一些前缀设置;A1、A2;R7...如上表所示。

然后是一个requested变量(或者更确切地说是一个变量列表),它基本上说明了客户的要求,每个尺寸的数量。

目标函数是找到一组重复,使其尽可能匹配请求的数量。因此,在解算器中(抱歉,没有英文屏幕截图),您可以看到目标是N21(即每个大小的绝对差之和)。变量是N2:N9- 这是每次设置的重复次数,唯一的限制是它N2:N9是一个整数。

我如何用 python 模拟这种行为?我的开始:

from collections import namedtuple

from pulp import *


class Setup(namedtuple('IAmReallyLazy', 'name ' + ' '.join(f's{s}' for s in range(36, 47)))):
    # inits with name and sizes 's36', 's37'... 's46'
    repetitions = 0


setups = [
    Setup('A1', 1, 2, 3, 3, 2, 1, 0, 0, 0, 0, 0),
    Setup('A2', …
Run Code Online (Sandbox Code Playgroud)

python linear-programming pulp

0
推荐指数
1
解决办法
2003
查看次数

不优化路线的最小成本流

我正在尝试使用 OR-Tools 中的 MinCostFlow 解决工程问题。有一个带有管道和多个供应阀的机械分配系统。这些阀门需要连接到消费者。最初,我试图用匈牙利算法来解决这个问题,但后来我意识到通过路径的流量没有被考虑在内。

我用这样的最小成本流对问题进行了建模: 流程设计

节点 0-4 是消费者,节点 4-7 是供应阀,节点 8 和 9 是管道。我在每个消费者身上放置了一个“供应”,以显示它期望的流量。我在最后放了一个水槽,以便从系统中取出电源。并非所有消费者都有相同的需求。我们可以看到节点 0 需要 10 个,我专门设计了一条路径(以红色突出显示),允许它携带它到那里。我暂时将所有价格设置为 0。

我希望它能像这样解决这个系统: 在此处输入图片说明

然而,它实际上是这样解决的:

在此处输入图片说明

出于某种原因,它决定将节点 0 拆分为 2 个节点(6 和 7),然后让较大的节点 7 从 3 和 0 接收 5。从系统角度来看,这并不理想,我不明白为什么会这样会这样解决。在匈牙利算法中,它不允许一个 Worker 接受多个 Job。在该算法中,节点 4-7 将是工人,而 0-3 将是作业。

我可以通过增加从节点 1-3 到节点 7 的弧的成本来获得所需的结果,但我不想操纵成本字段来获得所需的结果。这似乎需要很多额外的工作来帮助优化工具选择正确的路径。

我如何使用 OR-Tools 来完成此操作?

c# algorithm linear-programming or-tools

0
推荐指数
1
解决办法
137
查看次数

为什么 CPLEX 将不相关的变量设置为 1?

我一直在研究可以建模为整数线性规划的组合优化问题。我在 Visual Studio 2017 和 CPLEX1271 中将它实现为一个 C++ 项目。由于有成倍数的约束,我通过 IloCplex::LazyConstraintCallbackI 实现了惰性约束。在我看来,以下过程是如何产生最优解的:每次确定一个整数解时,LazyConstraintCallbackI 将检查它并向模型添加一些违反约束,直到获得最优整数解。

但是,我对不同输入的实现给出的目标值并不总是正确的。经过将近一年的间歇性调试和测试,我终于找到了原因,这与问题非常相关,但可以通过以下小示例来解释(希望如此):涉及四个布尔变量 x1、x2、x3 和 x4 的整数线性规划

minimize x1
subject to: 
x1  ?  x2
x1  ?  x3
x1  ?  x4
x2  + x3  ? 1
x1, x2, x3 and x4  ? {0, 1}?
Run Code Online (Sandbox Code Playgroud)

cplex给出的结果是:

Solution status = Optimal
Objective value = 1
x1 = 1
x2 = 1
x3 = 1
x4 = 1?
Run Code Online (Sandbox Code Playgroud)

毫无疑问,目标值是正确的。奇怪的是cplex设置x4 = 1。虽然x4等于1或0对这个编程中的目标值没有影响。但是,当使用惰性约束回调时,这可能会通过添加一些不正确的约束而导致问题,并且整数编程可以通过迭代添加违反约束来解决。我想知道:

  1. 为什么 cplex 将“无关”变量 x4 设置为 1,而不是 0?
  2. 我应该怎么做才能告诉 CPLEX 我想将这种“无关”变量保留为 0?

linear-programming cplex integer-programming

0
推荐指数
1
解决办法
95
查看次数

Fantasy Football的Python PuLP优化问题,如何添加某些条件约束?

目前这是我第一次在 python 中使用 PuLP 库。深入研究这个库的目的是用Python制作一个梦幻足球解算器。我已经成功制作了求解器,但不知道如何添加我需要的一些约束。

我有一个 400 名球员的 Excel 表格以及我如何预测他们的比赛方式,并且我想在给定特定限制的情况下找到 9 名球员的最佳组合。Excel 表包含球员姓名、球员投射、球队球员在场、对手球员面对以及位置。下面是 panda 数据框的头部的样子。

              Name  Projection Position Team  Salary Opponent
0             Jets    3.528576      DST  NYJ    2000      IND
1           Texans    7.936528      DST  HOU    2100      PIT
2         Panthers    4.219883      DST  CAR    2200      LAC
3          Raiders    0.904948      DST  LVR    2300       NE
Run Code Online (Sandbox Code Playgroud)

我成功完成的约束条件是:限制最多选择9名球员,QB位置仅1人,WR位置3-4人,TE位置1-2人,DST位置1人,RB位置2-3人。

raw_data = pd.read_csv(file_name,engine="python",index_col=False, header=0, delimiter=",", quoting = 3)

#create new columns that has binary numbers if player == a specific position
raw_data["RB"] = (raw_data["Position"] == 'RB').astype(float)
raw_data["WR"] = (raw_data["Position"] == …
Run Code Online (Sandbox Code Playgroud)

python optimization linear-programming pandas pulp

0
推荐指数
1
解决办法
1734
查看次数

非线性约束的优化问题

我是优化问题的新手,正在研究一个简单的最大化问题,我可以在 Excel 中非常简单地解决这个问题。但是,我需要在 Python 中扩展它并需要一些帮助。

我有一份不同食物的菜单,我需要最大限度地提高我的能量输出。例子:

食物 卡路里 活力
蛋白质 100 60
蛋白质 羊肉 200 40
蛋白质 200 38
碳水化合物 香蕉 200 25
碳水化合物 土豆 200 30
碳水化合物 200 40
胖的 牛油果 450 50
胖的 奶酪 400 60
胖的 奶油 500 55

鉴于以下限制,我需要最大化能量(e):

  1. 每个 Macros(m) 只能消耗 1 个食物项目 (i)。所以我需要一个指示变量 (0/1) 来从 m - 蛋白质、脂肪和碳水化合物中的每一个中只选择 1 个。
  2. 卡路里总数 (c) 不应超过一个恒定值假设每个项目有 1 份(对此没有限制)

问题表述:

变量: X (m,i) ? 二元变量 = {1 ,如果宏 m 和项目 i 被选择,0 否则}

最大化 …

python linear-programming pulp mixed-integer-programming scipy-optimize

0
推荐指数
1
解决办法
124
查看次数