Flow-Shop Scheduling


    {  Exmpl7.2-1_FlowShopScheduling.mpl }

    {  Applications of Optimization with Xpress-MP  }

    {  Chapter 7.2,  Flow-Shop Scheduling,  Size: 40x81,  Page 117 }


TITLE
    FlowShopScheduling;

DATA
    Nm := 3;
    Nj := 6;

INDEX
    mach := 1..Nm;
    ranks := 1..Nj;
    job  := 1..Nj;

DATA
    Dur[job,mach] := (3,6,3,5,5,7,
                      5,4,2,4,4,5,
                      5,2,4,6,3,6);

VARIABLE
    Rank[job,ranks];
    Empty[mach,ranks=1..Nj-1];
    Wait[mach=1..Nm-1,ranks];
    Start[mach,ranks];

MODEL

    MIN TotalWait = SUM(mach=1..Nj-1,job: Dur * Rank[ranks:=1])
                  + SUM(ranks=1..Nj-1: Empty[mach:=Nm]);

SUBJECT TO

    AssPostionJob[ranks] -> POSJB:
       SUM(job: Rank) = 1;

    AssJobRank[job] -> JBRNK:
       SUM(ranks: Rank) = 1;

    EndRelations[mach<>last(mach),ranks<>last(ranks)] -> EREL:
       Empty + SUM(job: Dur * Rank[ranks+1]) + Wait[ranks+1]
     =
       Wait + SUM(job: Dur[mach+1] * Rank) + Empty[mach+1];

    CalcStrtTimes[mach,ranks] -> CSTRT:
       Start
     =
       SUM(mach=1..mach-1,job: Dur * Rank[ranks:=1])
     + SUM(ranks=1..ranks-1,job: Dur * Rank)
     + SUM(ranks=1..ranks-1: Empty);

BOUNDS
    FirstMachNoIdle[ranks<>last(ranks)]:
       Empty[mach:=1] = 0;
    FirstJobNoWait[mach<>last(mach)]:
       Wait[ranks:=1] = 0;

BINARY
    Rank;

END


Back To Top | Maximal Home Page | List of Models | Previous Page | Next Page