I want to create an optimized schedule and production to meet demand of four different buyers. I am starting with Pulp but not able to account for continuous production variable and discrete dispatch together. I have following details, objective is to avoid tank top situation:

  • Expected production is constant at 6,000m3/h.
  • Storage capacity is 400,000m3,
  • LNG carrier parcel size is 300,000m3 (1 parcel every 50h),
  • Ship loading rate is 20,000m3/h,
  • Start of loading occurs such that stock level at end of loading (operational buffer) is 40,000m3.

Objective (Maximmize) = $150/m3*(Volume Shipped on time) - $100/m3*(Volume Produced)-$200/m3*(Volume wasted due to tank top) + $100/m3*(delayed volume shipping)

Constraints: Tank Capacity (Minimum & Maximum); Shipping Capacity (One loading every 50 h)

Decision Variable: Production Rate (+/-10%) Shipping Schedule (+/-24h)

..............Adding details................ With the details mentioned above, I have a base schedule. Now when my production rate changes, I want to move the schedule accordingly such that I am either moving the ships around (comes with a penalty) or using the extra volume (in case of increased production) to load an additional cargo of same capacity or cancel a cargo (in case of reduced production) to ensure that the rest of the schedule is closely met.

so, two decisions to be made:

  1. Move the ships slightly (number of hours)
  2. Add or remove a cargo (Where in schedule to put to move the rest the least)

Objective function: Cost minimization = Penalty to move ship + (benefit/loss) of change in number of cargoes

Looking for help. PS: I am looking forward to solve this in continuous time frame.

  • 3
    $\begingroup$ Try the following methodology (and show the community your best try) : 1) define your variables 2) define your cost function 3) define your constraints (expected production, storage capacity, etc) $\endgroup$
    – Kuifje
    Aug 7, 2020 at 15:07
  • $\begingroup$ It seems like production has to stop when the tank is full. Is that what you mean by volume waste? How do you determine shipping delays? Is the shipping capacity set at 50 hours because that is the length of time it takes to produce a full batch or because of something else? It seems that under the right conditions, a batch could finish loading only 40 hours after the previous- not repeatedly, of course, but it might be worth considering to avoid delays. The volume batches and production rates don't seem to be a MILP modeling issue. Can you describe the challenge are you facing with that? $\endgroup$
    – Wesley Dyk
    Aug 8, 2020 at 4:20

1 Answer 1


I'll address your main issue about discrete dispatch. You should model the problem utilizing inventory levels at discrete time intervals that are short enough to fit just one shipment, which sounds like hourly. Utilize tank volume at the end of time interval $t$: $v_t$ for all $t$ between 1 and the end of the planning horizon. This allows you to create a constraint that models the LNG production, inventory and shipped volumes: $v_t = v_{t-1} + r_t - s_t$ where $r_t$ is the rate of production during time interval $t$ and $s_t$ is the shipped volume during the same interval. The rest of the model can be built upon this relationship.

See this question for a shipping model in pulp that could get you started.

Once you have a simple model and get stuck while adding to it, post an additional question.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.