help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] Newbie Question


From: Andrew Makhorin
Subject: Re: [Help-glpk] Newbie Question
Date: Mon, 11 Aug 2008 15:14:28 +0400

> I am trying to write a model to maximize overall output when selecting
> personnel given a budget, the salary of each potential person and
> their output ability.
>  
> The problem I have is writing a rule where one person will be
> choosen as team leader and their output will be calculated as double.
>  
> Please, could someone help me with this?
>  
> Thanks.
>  
> /* sets */
> set PERSON;
> set POSITIONS;
> /* parameters */
> param num_of_positions {i in POSITIONS};
> param salary {i in PERSON};
> param output {i in PERSON};
> param position {i in PERSON, j in POSITIONS};
> /* decision variables: yi, i in {1,..,7}. yi = 1 -> person i is hired */
> var y {i in PERSON} binary >=0;
> /* objective function */
> maximize z: sum{i in PERSON} output[i]*y[i];
> /* Constraints */
> s.t. pos{j in POSITIONS}: sum{i in PERSON} 
>       position[i,j]*y[i] = num_of_positions[j];
> s.t. people: sum{i in PERSON} y[i] = 12;
> s.t. budget: sum{i in PERSON} salary[i]*y[i] <= 1150000;

> data;
> set PERSON := 1 2 3 ... 100;
> set POSITIONS := A B C D E;
>  
> param num_of_positions :=
> A     1
> B     5
> C     3
> D     2
> E     1;
>  
> param salary:=
> 1   90000
> 2   90000
> 3   70000
> .
> .
> 98  61000
> 99  58000
> 100 67000;
>  
> param output:=
> 1   22
> 2   93
> 3   14
> .
> .
> 98  41
> 99  10
> 100 16;

> param position: A B C D E:=
> 1               1 0 0 0 0
> 2               0 0 1 0 0
> 3               0 1 0 0 0
> .
> .
> 98              0 1 0 0 0
> 99              0 0 0 0 1
> 100             1 0 0 0 0;

If I correctly understand your model:

var leader{i in PERSON}, binary;
/* leader[i] = 1 means that person i is a leader */

s.t. foo{i in PERSON}: leader[i] <= y[i];
/* person i cannot be a leader, if he is not hired */

s.t. bar: sum{i in PERSON} leader[i] = 1;
/* there must be exactly one leader */

maximize z: sum{i in PERSON} output[i]*(y[i] + leader[i]);






reply via email to

[Prev in Thread] Current Thread [Next in Thread]