JSB10
JSB10

Reputation: 69

Creating a List of Variables to find maxima

I was trying to create a list with the values of a set of variables that are calculated each go procedure based of other variables. In this case I am trying to create a list of utility values which will cause the decision for the agent which runs the procedure to change their TIME variable. All the caulculations part is correct, the only problem comes when trying to create the list for the utilities and choosing the maximum value from it to continue the procedure. Does anyone know what I can do to avoid this problem? Cheers

to utility-runway


  let feepKG7 [feepKG] of runway1
  let feepKG8 [feepKG] of runway2
  let feepKG9 [feepKG] of runway3
  let feepKG10 [feepKG] of runway4
  let feepKG11 [feepKG] of runway5
  let feepKG12 [feepKG] of runway6
  let feepKG13 [feepKG] of runway7
  let feepKG14 [feepKG] of runway8
  let feepKG15 [feepKG] of runway9
  let feepKG16 [feepKG] of runway10
  let feepKG17 [feepKG] of runway11
  let feepKG18 [feepKG] of runway12
  let feepKG19 [feepKG] of runway13
  let feepKG20 [feepKG] of runway14
  let feepKG21 [feepKG] of runway15
  let feepKG22 [feepKG] of runway16
  let feepKG23 [feepKG] of runway17


   set utility7 ( ( previous-business1 + previous-leisure1 + previous-business2 + previous-leisure2 ) / feepKG7 )
   set utility8 ( ( previous-business1 + previous-leisure1 + previous-business2 + previous-leisure2 + previous-business3 + previous-leisure3 ) / feepKG8 )
   set utility9 ( ( previous-business2 + previous-leisure2 + previous-business3 + previous-leisure3 + previous-business4 + previous-leisure4 ) / feepKG9 )
   set utility10 ( ( previous-business3 + previous-leisure3 + previous-business4 + previous-leisure4 + previous-business5 + previous-leisure5 ) / feepKG10 )
   set utility11 ( ( previous-business4 + previous-leisure4 + previous-business5 + previous-leisure5 + previous-business6 + previous-leisure6 ) / feepKG11 )
   set utility12 ( ( previous-business5 + previous-leisure5 + previous-business6 + previous-leisure6 + previous-business7 + previous-leisure7 ) / feepKG12 )
   set utility13 ( ( previous-business6 + previous-leisure6 + previous-business7 + previous-leisure7 + previous-business8 + previous-leisure8 ) / feepKG13 )
   set utility14 ( ( previous-business7 + previous-leisure7 + previous-business8 + previous-leisure8 + previous-business9 + previous-leisure9 ) / feepKG14 )
   set utility15 ( ( previous-business8 + previous-leisure8 + previous-business9 + previous-leisure9 + previous-business10 + previous-leisure10 ) / feepKG15 )
   set utility16 ( ( previous-business9 + previous-leisure9 + previous-business10 + previous-leisure10 + previous-business11 + previous-leisure11 ) / feepKG16 )
   set utility17 ( ( previous-business10 + previous-leisure10 + previous-business11 + previous-leisure11 + previous-business12 + previous-leisure12 ) / feepKG17 )
   set utility18 ( ( previous-business11 + previous-leisure11 + previous-business12 + previous-leisure12 + previous-business13 + previous-leisure13 ) / feepKG18 )
   set utility19 ( ( previous-business12 + previous-leisure12 + previous-business13 + previous-leisure13 + previous-business14 + previous-leisure14 ) / feepKG19 )
   set utility20 ( ( previous-business13 + previous-leisure13 + previous-business14 + previous-leisure14 + previous-business15 + previous-leisure15 ) / feepKG20 )
   set utility21 ( ( previous-business14 + previous-leisure14 + previous-business15 + previous-leisure15 + previous-business16 + previous-leisure16 ) / feepKG21 )
   set utility22 ( ( previous-business15 + previous-leisure15 + previous-business16 + previous-leisure16 + previous-business17 + previous-leisure17 ) / feepKG22 )
   set utility23 ( ( previous-business16 + previous-leisure16 + previous-business17 + previous-leisure17) / feepKG23 )


  set utility-list [ utility7 utility8 utility9 utility10 utility11 
    utility12 utility13 utility14 utility15 utility16 
    utility17 utility18 utility19 utility20 utility21 utility22 utility23 ]

  let max-utility max-one-of utility-list

  if max-utility = utility7 [set time 7]  
  if max-utility = utility8 [set time 8]  
  if max-utility = utility9 [set time 9] 
  if max-utility = utility10 [set time 10] 
  if max-utility = utility11 [set time 11] 
  if max-utility = utility12 [set time 12] 
  if max-utility = utility13 [set time 13] 
  if max-utility = utility14 [set time 14] 
  if max-utility = utility15 [set time 15] 
  if max-utility = utility16 [set time 16] 
  if max-utility = utility17 [set time 17] 
  if max-utility = utility18 [set time 18] 
  if max-utility = utility19 [set time 19] 
  if max-utility = utility20 [set time 20] 
  if max-utility = utility21 [set time 21] 
  if max-utility = utility22 [set time 22] 
  if max-utility = utility23 [set time 23] 




end

Upvotes: 1

Views: 474

Answers (1)

Bryan Head
Bryan Head

Reputation: 12580

First, I assume that each runway# is a turtle or link of breed runway. A much better way to structure this code is by applying the same operations to all the values at once. To do this, first we create a list of the feepKG values:

let feepKGs map [ [ feepKG ] of ? ] sort runways

The sort in front of runways makes it so that the first item of feepKGs corresponds to the first runway and so forth. Unfortunately, since you sort returns a list, you have to use map instead of of to get a list of the feepKGs.

Next, we need to get our list of utilities from the list of feepKGs. It looks like your calculation for utility7 may be incorrect, since it's the only one different. Anyway, to apply the same operation to each item in a list, we use map:

let utilities map [(previous-business1 + previous-leisure1 + previous-business2 + previous-leisure2 + previous-business3 + previous-leisure3 ) / ?] feepKGs

map applies that big expression to each element of feepKGs (where the ? is the element). So utilities here is the same as your utility-list (assuming that your expression for utility7 is in fact wrong). To get the value of the max utility, you can just use max:

let max-utility max utilities

Then, we get the index of the max-utility to find out which one it was. Since your utility numbers start at 7, and list indices start at 0, we have to add 7 to the index:

set time 7 + position max-utility utilities

Upvotes: 1

Related Questions