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$将最小化它们的总和。