[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-glpk] ordered and ord in MathProg?
From: |
Noli Sicad |
Subject: |
[Help-glpk] ordered and ord in MathProg? |
Date: |
Tue, 9 Feb 2010 06:03:53 +0700 |
Hi
While searching the net for materials in MRP (Material Requirement
Planning), I encountered this website,
http://faculty.gsm.ucdavis.edu/~dlw/scm.html (Introduction to
Computational Optimization Models for Production Planning in a Supply
Chain book). The models are implemented in major commercial LP solvers
i.e. AMPL, GAMS, MOSEL,MPL,OPL and AIMMS
The AMPL models use ordered and ord function, so the models are not
running in MathProg. Now, how do you do this in MathProg. Probably
good to have mathprog examples in PP and SCP.
Here is one of the models (mrp.mod + dat) (below).
Thanks, Noli
~~~~~~~~~~
set PP ordered; # Set of SKU Numbers
set TT ordered; # Set of Time Buckets
param P integer := card(PP); # Number of SKUs
param T integer := card(TT); # Number of Time Buckets
param M >= 0; # Large Number
param LT {PP} integer; # Lead Time
param R {PP,PP} integer; # number of i to make one j
param D {PP, TT} integer; # External Demand for an item in a period
param I {PP} integer; # Beginning Inventory
param LS {PP} integer; # Lot Size
var d {PP, TT} binary; # production indicator
var x {PP, TT} >=0; # number of SKUs to produce
# -----------------------------------------------------------------
minimize objective: sum {i in PP, t in TT}
(T-ord(t)+1) * x[i,t];
# -----------------------------------------------------------------
subject to MaterialRequirement {i in PP, t in TT}:
(sum {s in TT: ord(s) <= ord(t)-LT[i] } x[i,s] )
+ I[i]
- sum {s in TT: ord(s)<=ord(t)}
(D[i,s] + sum {j in PP} R[i,j]* x[j,s])
>= 0;
subject to LotSize {i in PP, t in TT}:
x[i,t] - d[i,t]*LS[i] >= 0;
subject to ProductionIndicator {i in PP, t in TT}:
d[i,t] - x[i,t]/M >=0;
data;
param M := 10000 ; # Large number
param: PP: LT := AJ8172 2 # Items with Lead Times
LQ8811 3
RN0098 4
NN1100 1
WN7342 12;
set TT := 1jan04 # Time Buckets
2jan04
3jan04
4jan04
5jan04
6jan04
7jan04
8jan04 ;
param R : # Number of i to produce one j
AJ8172 LQ8811 RN0098 NN1100 WN7342 :=
AJ8172 0 0 0 0 0
LQ8811 2 0 0 0 0
RN0098 1 0 0 0 0
NN1100 0 1 0 0 0
WN7342 0 1 0 0 0 ;
param D: # external demand for i in t
1jan04 2jan04 3jan04 4jan04 5jan04 6jan04 7jan04 8jan04 :=
AJ8172 20 30 10 20 30 20 30 40
LQ8811 0 0 0 0 0 0 0 0
RN0098 0 0 0 0 0 0 0 0
NN1100 0 0 0 0 0 0 0 0
WN7342 0 0 0 0 0 0 0 0;
param I := AJ8172 90 # Beginning Inventory of SKU i
LQ8811 300
RN0098 100
NN1100 0
WN7342 900;
param LS := AJ8172 100 # Lot Size
LQ8811 400
RN0098 100
NN1100 1
WN7342 1000;
- [Help-glpk] ordered and ord in MathProg?,
Noli Sicad <=