У меня есть данные о 100 потребителях-черепахах, которые оценили характеристики ноутбуков. Ноутбуки имеют 2 вида характеристик: размер экрана и время автономной работы. Каждый имеет несколько уровней. Например, срок службы батареи составляет 5 часов, 12 часов, 24 часа, 30 часов. Данные хранятся в файле csv. Для простоты здесь вы видите 2 потребителя.
size12 size13.5 size14 size15 Battery5 Battery12 Battery24 Battery30
1 1 *2* 1 3 2 2 *4* 5
2 4 3 3 2 1 1 2 3
Мы получаем доступ к набору данных, чтобы суммировать показатели двух уровней функции. Например, для потребителя 1, что такое:
The sum of rates of screen size of 13.5 + rate of battery life 24
Используя приведенный ниже код, это достигается:
to CalculateSumRates
ca
reset-ticks
file-close-all
file-open "turtle_details.csv"
let headings csv:from-row file-read-line
set screen-headings sublist headings 0 4
set battery-headings sublist headings 4 length headings
let screen-to-evaluate 13.5
let battery-to-evaluate 24
while [ not file-at-end? ] [
let data csv:from-row file-read-line
create-turtles 1 [
set turtle-screen-list sublist data 0 4
set turtle-battery-list sublist data 4 length data
set turtle-screen-eval turtle-screen-rating screen-to-evaluate
set turtle-bat-eval turtle-battery-rating battery-to-evaluate
set turtle-sum-eval turtle-screen-eval + turtle-bat-eval
]
]
file-close-all
end
to-report turtle-screen-rating [sc]
let pos position sc screen-headings
let turt-screen-rate-value item pos turtle-screen-list
report turt-screen-rate-value
end
to-report turtle-battery-rating [bc]
let pos position bc battery-headings
let turt-bat-rate-value item pos turtle-battery-list
report turt-bat-rate-value
end
Теперь я хочу сделать что-то большее. Мне нужно учитывать временной интервал. Например, через 20 лет, как потребители меняют свои оценки некоторых функций ноутбуков. Чтобы проиллюстрировать больше, потребитель 1, который выразил свой общий рейтинг размера 13,5 и батареи 24, в год 2 (галочки = 2) улучшил свой ноутбук, поэтому теперь мы хотели бы знать:
The sum of rates of screen size of 13.5 + rate of battery life **30**
Сначала я создал свой go
следующим образом:
to setup
CalculateSumRates
end
to go
repeat 20 [
{ screen-to-evaluate changes and is no longer 13.5}
{ battery-to-evaluate also changes and is no longer 24}
; ИЗМЕНИТЬ
set turtle-screen-eval turtle-screen-rating screen-to-evaluate
set turtle-bat-eval turtle-battery-rating battery-to-evaluate
set turtle-sum-eval turtle-screen-eval + turtle-bat-eval
; ИЗМЕНИТЬ
tick
]
end
Проблема здесь в том, что каждый раз, когда вызывается CalculateSumRates
, он переходит к этой строке:
create-turtles 1 [
Таким образом, каждый год 100 потребителей создаются с нуля, а мне нужно отслеживать поведение этих 100 потребителей в начале.
Затем я написал 2 функции CalculateSumRates
, одну из которых вызвал при настройке. Переименовал функцию и поставил другую в ход. Чтобы не создавать избытка потребителей, я заменил create-turtles 1 [
на ask consumers [
, надеясь, что теперь csv снова читается, но читается построчно, когда я говорю спросить потребителей, поэтому я могу найти разные значения из набора данных. Однако он работает странно. Я не знаю, как это изменить, чтобы не создавать новых потребителей и не терять предыдущих?
Добавляя строки в редактирование, я сталкиваюсь с ошибкой, говорящей мне, что я не могу использовать go в контексте наблюдателя; идти только черепаха!! Спасибо,
CalculateSumRate
? Кроме того, потребители из года в год одни и те же или разные? То есть совпадают ли потребители в первом наборе данных с потребителями в будущих наборах данных? Как хранятся будущие наборы данных? Просто отдельные файлы CSV? - person Bryan Head   schedule 14.07.2017