Reputation: 69
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
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 feepKG
s.
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