| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Planning problems Description
Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 8: Production planning
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
Data Files
c1bike.mos (!****************************************************** Mosel Example Problems ====================== file c1bike.mos ``````````````` Planning the production of bicycles A sales forecast shows the predicted bicycle demand for the upcoming year. There is a set production capacity per month but it can be increased with overtime (with additional costs). The company can store excess bikes at a small cost with no limit to quantity. How many bikes need to be produced and stored in the next year to meet the forecasted demand while minimizing total (production, overtime, storage) cost? This implementation using the inline 'if' function to condense the balance constraints since this varies for t=1 and t>1. Note that there is no slack built into the demand forecast so bike storage will be as low as possible to reduce total cost. This may not be practical if there is an unpredicted spike in demand. (c) 2008-2022 Fair Isaac Corporation author: S. Heipcke, Mar. 2002, rev. Mar. 2022 *******************************************************!) model "C-1 Bicycle production" uses "mmxprs" declarations TIMES = 1..12 ! Range of time periods DEM: array(TIMES) of integer ! Demand per months CNORM,COVER: integer ! Prod. cost in normal / overtime hours CSTOCK: integer ! Storage cost per bicycle CAP: integer ! Monthly capacity in normal working hours ISTOCK: integer ! Initial stock pnorm:array(TIMES) of mpvar ! No. of bicycles produced in normal hours pover:array(TIMES) of mpvar ! No. of bicycles produced in overtime hours store:array(TIMES) of mpvar ! No. of bicycles stored per month end-declarations initializations from 'c1bike.dat' DEM CNORM COVER CSTOCK CAP ISTOCK end-initializations ! Objective: minimize production cost Cost:= sum(t in TIMES) (CNORM*pnorm(t) + COVER*pover(t) + CSTOCK*store(t)) ! Satisfy the demand for every period forall(t in TIMES) pnorm(t) + pover(t) + if(t>1, store(t-1), ISTOCK) = DEM(t) + store(t) ! Capacity limits on normal and overtime working hours per month forall(t in TIMES) do pnorm(t) <= CAP pover(t) <= 0.5*CAP end-do ! Solve the problem minimize(Cost) ! Solution printing declarations MONTHS: array(TIMES) of string ! Names of months end-declarations initializations from 'c1bike.dat' MONTHS end-initializations writeln("Total cost: ", getobjval) write(" ") forall(t in TIMES) write(strfmt(MONTHS(t),4)) setparam("realfmt", "%4g") ! Reserve 4 char.s for display of real numbers write("\nDemand ") forall(t in TIMES) write(DEM(t)/1000) write("\nNormal ") forall(t in TIMES) write(getsol(pnorm(t))/1000) write("\nAdd. ") forall(t in TIMES) write(getsol(pover(t))/1000) write("\nStore ") forall(t in TIMES) write(getsol(store(t))/1000) writeln end-model | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© Copyright 2024 Fair Isaac Corporation. |