Je suis nouveau sur Netlogo et j'ai quelques problèmes.Comment coder la somme entre la valeur et la liste?
Lorsque je vérifie le code, tout va bien, mais quand je lance la simulation, l'erreur se produit.
Voici mon code:
breed [ factories factory ]
breed [ customers customer ]
breed [ warehouses warehouse ]
Factories-own [
orders
stock_f
kilograms-of-products
]
Customers-own [
stock_c
demand
kilograms-of-products
]
Warehouses-own [
orders
stock_w
kilograms-of-product
]
to setup
clear-all
reset-ticks
ask patches [ set pcolor white]
create-Factories 1 [
setxy -12 -5
set size 3
set color red
set label (word "Factory" [who] of self " ")
set shape "house"
set stock_f 77482.1
]
create-warehouses 1 [
setxy 0 0
set size 3
set color blue
set label (word "warehouse" [who] of self " ")
set shape "house"
set stock_w 108
set orders [ 86.34 70.43 5000.89 148.22 54.39 3055.76 0.66 1.69 7.2 4553.56 40.6 116.53 6130.37 5.18 2698.57 79.55 2405.85 41.3 11.41 36.5 7877.06 18.93 14.99 4041.12 10.3 728.16 59.68 4703.43 50.93 93.16 31.5 3689.66 21.6 9.8 83.48 1.18 121.02 5441.62 796.53 162.29 6874.33 97.29 2749.3 1.48 47.13 5056.77 2163.82 1406.06 12.6 4753.59 257.46 1374.46 186.37 ]
]
create-customers 1 [
setxy random 30 - 0 random 30 - 15
set size 1
set color green
set shape "box"
set stock_c 0
set demand [ 13.8 29.9 58.3 18.5 0.8 6.6 12.1 14.1 8.7 56 3.3 0.1 9.5 11.7 0.2 6.7 10.5 16 3.6 94.1 5.2 69.1 7.2 29 15.8 7.7 20.2 21 39.8 83.2 10.6 48.6 25.1 13.1 66.1 16.7 85 27.5 7.5 31.5 9.4 16 2.6 5.8 5.5 134.8 108.7 159 49 0.4 90.6 25.2 2.6 1.7 56.1 49.5 21.4 10.6 3.9 1.4 35.7 10.7 62.9 49.5 ]
]
ask customers [ create-link-with turtle 1 ]
ask turtle 1 [ create-link-with turtle 0 ]
end
to go
send-products
buy-products
if count customers with [ not empty? demand] = 0
[stop]
tick
end
to send-products
ask turtles with [ breed = factories ] [
let i 0
while [ i < length(orders)] [
ask turtle (item i orders) [
set stock_f (stock_f - item i orders)
set i i + 1]
set i 0
while [i < length(orders)]
[if last (item i orders) = ticks
[set orders replace-item i orders [0 0]]
set i i + 1]]
let list1 []
set list1 lput (stock_f - item i orders) list1
show list1
]
ask turtles with [breed = warehouses] [
let x 0
while [ x < length(orders)] [
ask turtle (item x orders) [
set stock_w (stock_w + item x orders)
set x x + 1]
set x 0
while [x < length(orders)]
[if last (item x orders) = ticks
[set orders replace-item x orders [0 0]]
set x x + 1]]
let list2 []
set list2 lput (stock_w + item x orders) list2
show list2
]
end
to buy-products
;Customers go shopping according to their demand and their stock
ask turtles with [ breed = customers ] [
let a 0
while [ a < length(demand)] [
ask turtle (item a demand) [
set stock_c (stock_c + item a demand)
set stock_w (stock_w - item a demand)
set a a + 1]
set a 0
while [ a < length(demand)]
[if last (item a demand) = ticks
[ set demand replace-item a demand [0 0]]
set a a + 1]]
let list3 []
set list3 lput (stock_c + item a demand) list3
show list3
let list4 []
set list4 lput (stock_w - item a demand) list4
show list4
]
end
Pourquoi le length(orders)
n'est pas OK? Est-ce un problème parce que les tortues [commandes]? Ou dois-je définir les commandes en tant que liste? Comment je fais ça? Le code fonctionnera-t-il si j'ai des n-clients avec des commandes différentes?
Ce que je voudrais faire dans mon code, c'est créer un flux de produits de l'usine à l'entrepôt et à la fin aux clients.
S'il vous plaît aidez-moi.
S'il vous plaît jeter un oeil sur les lignes directrices demandant des conseils sur la mise en place d'un (https [exemple minimal, complet, vérifiable]: // stackoverflow.com/help/mcve). Évitez d'utiliser des images pour afficher le code (ou une erreur - il suffit de le coller); à la place, collez votre code et utilisez le bouton "Exemple de code". Pouvez-vous inclure le code où vous configurez les commandes? Il semble que vous appeliez 'send-products' avant que vous ayez défini' des commandes en tant que liste - mais c'est juste une supposition sans voir le reste du code. –