与分段函数相关的Python优化算法

时间:2017-07-01 16:14:58

标签: python algorithm optimization

我有一种分段函数f(p,q,x),它由列表q和p确定。
例如,以下表示当x在[0,3]之间时f为100,而当x在(3,5)之间时为f     p q
    100 3
    95 2
    90 6

我的问题是找到满足f(pa,qa,x)<的最大x。 p(pb,qb,x),给定参数pa,qa,pb,qb(pa按升序排序,pb按降序排序)。

我可以想到一个像下面这样天真的解决方案。

def f(p,q,x):
  y=0
  for i in range(len(p)):
   y+=q[i]
   if y>=x:
       return p[i]
return p[len(p)-1]

pa=[92,94,104]
qa=[4,2,3]
pb=[100,95,90]
qb=[3,2,6]

x=0
for i in range(min(sum(qa),sum(qb))):
    if f(pa,qa,i)<f(pb,qb,i):
        x=i
    else:
        break
print(x)

但这个解决方案有两个问题 *它不适用于浮点输入
*效率低下,当列表很大时可能会出现性能问题 谁能指出我一个优雅的解决方案,避免上述问题?

顺便说一下,我知道这可以在纸浆或scipy linprog中轻松解决,但更愿意使用专门的算法。

非常感谢,

Acquila

0 个答案:

没有答案