Python 使用Docplex最小化延迟百分比
我有这样一个熊猫数据框:Python 使用Docplex最小化延迟百分比,python,pandas,mathematical-optimization,cplex,docplex,Python,Pandas,Mathematical Optimization,Cplex,Docplex,我有这样一个熊猫数据框: tail_n | flight_route | Percentage_delay _______________________________ 'N14125' | '(VB, MI)' | 0.1 | '(CC, SK)' | 0.5 | '(KF, KC)' | 0.3 'N351JB' | '(AZ, AL)' | 0.2
tail_n | flight_route | Percentage_delay
_______________________________
'N14125' | '(VB, MI)' | 0.1
| '(CC, SK)' | 0.5
| '(KF, KC)' | 0.3
'N351JB' | '(AZ, AL)' | 0.2
| '(AU, NY)' | 1
'N938DN' | '(ALB, TPA)'| 0.1
| '(ORD, JAC)'| 0.1
tail_n = ['N14125','N351JB', 'N938DN', 'N592AS', 'N614MQ', 'N8654B', 'N997DL', 'N852AA', 'N794SW', 'N37274', 'N899AT', 'N8315C','N479CA','N961DN', 'N3LPAA', 'N27205', 'N317US', 'N8653A', 'N454UA', 'N5CKAA', 'N904DA', 'N854UA', 'N73270', 'N33264', 'N3LEAA', 'N931DN', 'N6704Z', 'N944UW', 'N929JB', 'N626AW','N73276', 'N16976', 'N108UW', 'N905SW', 'N610WN', 'N437SW', 'N440LV']
我有一个航班号列表,如下所示:
tail_n | flight_route | Percentage_delay
_______________________________
'N14125' | '(VB, MI)' | 0.1
| '(CC, SK)' | 0.5
| '(KF, KC)' | 0.3
'N351JB' | '(AZ, AL)' | 0.2
| '(AU, NY)' | 1
'N938DN' | '(ALB, TPA)'| 0.1
| '(ORD, JAC)'| 0.1
tail_n = ['N14125','N351JB', 'N938DN', 'N592AS', 'N614MQ', 'N8654B', 'N997DL', 'N852AA', 'N794SW', 'N37274', 'N899AT', 'N8315C','N479CA','N961DN', 'N3LPAA', 'N27205', 'N317US', 'N8653A', 'N454UA', 'N5CKAA', 'N904DA', 'N854UA', 'N73270', 'N33264', 'N3LEAA', 'N931DN', 'N6704Z', 'N944UW', 'N929JB', 'N626AW','N73276', 'N16976', 'N108UW', 'N905SW', 'N610WN', 'N437SW', 'N440LV']
我的目标函数是最小化延迟:
最小化(总和(延迟百分比*a)
其中a是一个二进制决策变量,可以是0或1
限制条件是尾部的数量必须小于3752且大于3000吨
我计划将cplex与python结合使用
我知道这是一个非常困难的问题,但如果有人能如此好心地帮助我,我将非常感激。如果你让
a
为常数零,你的目标是零。鉴于所有数字都是正的,这是一个最小值。我是否遗漏了什么?和的范围是什么?和的尾部是如何出现在和中的?嗨,a I这是一个决策变量。它决定一架飞机是否会飞行。每架飞机都由一个“tail_n”标识。但至少需要3000架飞机,所以你不能让决策变量为常数零。我没有想到总和的范围。我猜它只是从0到+无限。非常感谢你的时间。我们之间的关系是什么en a和尾部?每个尾部有a吗?如果有,每个尾部似乎有多个百分比延迟值;你选择哪一个?其中一个,它们的总和,或者其他什么?是的,每个尾部有一个a。谢谢你给我解释,我没有具体说明。我会选择它们的平均值。在这种情况下,贪婪算法提供了正确的答案结果,并且不需要使用任何类型的通用优化解算器:由于所有概率都可能是非负的,只需找到3000个最低的$p_n$s,并让$a_n$s为1即可:任何具有超过3000个正$a_n$s的解都可以通过移除任何给定的$n$来改进,因此最优解使用的概率不超过3000对于这些,很明显,简单地选择尽可能少的$pn$将最小化它们的总和。