2017-06-22 10 views
0

ホテルの収益を最適化するために線形計画を使用する論文を再作成しようとしています。 私は多くの異なるx [i、j]を解決しようとしていますが、xは予約が受け入れられ、私はチェックイン、jはチェックアウトです。私はこれらの[i、j]ペアのそれぞれについて、私が輸入しているものと、予約が受け入れられたものがそれぞれ< = demandであることを要求しています。 私の人生のために、どのくらいの日のkでも、すでにホテルにいる人+日kにチェックインしている人 - 日kにチェックアウトしている人は< =容量でなければならないという制約をプログラムする方法を考え出すことはできません。ここ は、私がアップコーディングしようとしているものです: constraintsPuLP - Python - ホテル収入の最適化

ここでは、これまでに私のコードです:

import pandas as pd 
import pulp 

# Instantiate our problem class 
model = pulp.LpProblem("Hotel revenue maximization", pulp.LpMaximize) 

#Import demand info 
demand= pd.DataFrame.from_csv("demandSAHRO.csv", index_col= 
['Check_in_day_i', 'Check_out_day_j']) 

#Will optimize for # bookings to accept for any i,j pairing 
bookingsaccepted = pulp.LpVariable.dicts("bookingsaccepted", 
           ((i, j) for i, j in demand.index), lowBound=0, cat='Integer') 


# Objective Function - 0.84 is unit revenue per room 
model += (
pulp.lpSum([ 
    0.84 * bookingsaccepted[i, j] for i, j in demand.index]) 
) 

# Constraints 
capacity = 400 


#Accepted Check in before day k + accepted check in on day k - accepted check out on day k <= capacity 
model += 
for i, j in demand.index: 
    for k in range(1,10): 
    #Day k between check in and check out dates 
     while i<k<j: 
      #Rooms already occupied during night k 
      pulp.lpSum([bookingsaccepted[i, j] for i, j in demand.index])) 
      + 
      #Rooms checking in on day k 

      - 

      #Rooms checking out on day k 

私はPythonでコーディングに新たなんだので、任意の助けをパルプを使用する新しいブランドが大いにあります感謝。

答えて

2

いくつかのケースをテストするためにいくつかのデータを作成しましたが、次のように動作するはずです。そうでない場合は、demandSAHRO.csvのデータを共有してください。私はそれを微調整しようとします:

for k in range(1, T): 
    model += pulp.lpSum([bookingsaccepted[i, j] \ 
         + bookingsaccepted[k, j] \ 
         - bookingsaccepted[i, k] \ 
         for i, j in demand.index if i < k < j]) \ 
         <= capacity 
+0

ありがとう、これは機能しました! – user3242036