Python Целлюлоза: Моделирование переменных даты и времени - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над проблемой оптимизации, которая включает минимизацию простоя при транспортировке. Я изо всех сил пытаюсь смоделировать, как представить / вычислить разницу (xy) между датами, когда судно готово к загрузке , и когда судно фактически загружено . Эта разница в днях - это место, где взимается плата за простой (если применимо).

Как я могу рассчитать эту разницу в мякоти и смоделировать дату «Vessel_ready_to_load» в сравнении с датой «Vessel_start_load»? для каждой даты загрузки и каждого уведомления о готовности, но тогда как пульпа распознает разницу в днях между двумя датами, чтобы рассчитать общий простой?

Код ниже:

planning_horizon_dates ['2020-01-01', '2020-01-02', '2020-01-03']

# Port inventory
port_stock_inventory = {
    'RBL': {'current': 200000, 
            'target': 180000, # Note targets are set by separate opt.
            'max': 200000}, 
    'RB2': {'current': 200000, 
            'target': 180000, 
            'max': 200000},
    'PRE': {'current': 200000, 
            'target': 180000, 
            'max': 200000},
    'AFL': {'current': 200000,
            'target': 180000,
            'max': 200000},
    'ACA': {'current': 200000,
            'target': 180000,
            'max': 200000}}

sales_demand_by_vessel ={
    '2020-01-01': {
        'CEYLON': {
            'MAF': 0, 'PRE': 40000, 'ZBL': 0, 'AFE': 10000, 'AAC': 70000
            },
        'KONOS': {
            'MAF': 0, 'PRE': 100000, 'ZBL': 0, 'AFE': 0, 'AAC': 0
            },
        'BULK JAPAN': {
            'MAF': 30000, 'PRE': 0, 'ZBL': 70000, 'AFE': 0, 'AAC': 0
            },
        'XIN FA HAI': {
            'MAF': 0, 'PRE': 0, 'ZBL': 9000, 'AFE': 20000, 'AAC': 0
        }
    },
    '2020-01-02': {
        'PACIFIC MAJOR': {
            'MAF': 50000, 'PRE': 0, 'ZBL': 60000, 'AFE': 10000, 'AAC': 0
            },
        'CCSC YASA JING': {
            'MAF': 10000, 'PRE': 0, 'ZBL': 0, 'AFE': 0, 'AAC': 60000
            },
        'XIAOMING HAO HAI': {
            'MAF': 30000, 'PRE': 0, 'ZBL': 70000, 'AFE': 0, 'AAC': 0
            },
        'ROBUSTA': {
            'MAF': 0, 'PRE': 0, 'ZBL': 0, 'AFE': 50000, 'AAC': 0
        }
    },
    '2020-01-03': {
        'AQUA': {
            'MAF': 0, 'PRE': 0, 'ZBL': 0, 'AFE': 10000, 'AAC': 70000
            },
        'ARUN': {
            'MAF': 0, 'PRE': 0, 'ZBL': 50000, 'AFE': 0, 'AAC': 0
            },
        'HARALL': {
            'MAF': 30000, 'PRE': 0, 'ZBL': 70000, 'AFE': 0, 'AAC': 0
            },
        'MAMBO': {
            'MAF': 0, 'PRE': 0, 'ZBL': 9000, 'AFE': 20000, 'AAC': 0
        }
    },
}


# Model
model = pulp.LpProblem('Demurrage Optimisation', pulp.LpMinimize)


# Objective Function
model += pulp.lpSum([
    demurrage_charge_vars[vessel]
    for vessel in demurrage_charge_vars])

# Vessel can ONLY begin loading if there is sufficient supply of each product
for vessel in vessels:
  model += port_inventory[date][product] >= sales_demand_by_vessel[date][vessel][product] == 
  load_start_date[vessel]

# Vessel loading can only on or after notification of readiness
for vessel in vessels:
  model += load_start_date[vessel] >= readiness_date_dict[vessel]
  model += load_start_date_dict[vessel] - readiness_date_dict[vessel]  * daily_dem_rate == demurrage_charge_vars[date][vessel]

Любая помощь с большой благодарностью получена!

...