标签: 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
查看次数