Создание атрибута породы и управление - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть две породы, скажем, sellersA и sellersB, и предмет, который я хочу создать для одного продавца, выбранного из sellersA или sellersB. Поэтому сейчас у меня есть

globals[
chosen?
]

breed [sellersA sellerA]
breed [sellersB sellerB]

sellersA[
catalogue
]

sellersB[
catalogue
]

и предмет, который имеет два атрибута, attr1 и attr2. Я инициализировал каталог в настройках: set catalogue [].

Следующая часть кода должна проверять, пуст каталог или нет: если он пуст, выбранный продавец создает новый товар с некоторыми конкретными атрибутами (1 и 2):

 let selected_one nobody
  let customers nobody



set selected_one one-of turtles with [breed = sellersA or breed = sellersB]

  ifelse empty? [catalogue] of selected_one [
  create-items 1[ hide-turtle set new_item self set chosen? false]
  ifelse [breed = sellersA] of selected_one
    [ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function1 (1 + attr2)
      ]
    ]
    [ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function2 (1 - attr2)
      ]
    ]

Затем продавец добавляет товар в свой каталог и в каталог покупателей, связанных с.

    ask selected_one [
        set customers (turtle-set self in-link-neighbors with [breed = sellersA])
        ask customers [set catalogue fput new_item catalogue]
      ]
    ]
  ]

Если каталог выбранного продавцане пустой (т. е. у продавца есть предметы для продажи), я хотел бы выбрать один из предыдущих созданных товаров и отследить его (например, если один из продавцов А создал этот новый товар, и этот товар был добавлен в его список и его клиентов'list (neighbours), я хотел бы знать, сколько клиентов из этого района выбрали этот товар).

Для ваших предыдущих ответов на мои вопросы я знаю, что должен использовать расширение rnd:weighted-one-of, и, чтобы выбрать элемент с наибольшим значением одного из двух атрибутов, я должен создать новый список столько индексы, которые указывают на атрибуты созданного объекта. Для этого необходимо использовать who. Однако, как результат, я получаю только пустые списки, когда я запускаю show catalogue в наблюдателе. Я думаю, что проблема может быть в определении предмета и его атрибута. Я пытался определить его как породу с attr1 и attr2, но он не работал, когда я поставил функцию как sellersA-own.

Я бы хотел сохранить простой код, но не знаю как.

Надеюсь, вы мне поможете.

1 Ответ

1 голос
/ 10 ноября 2019

Вы не показываете его, поэтому я предполагаю, что у вас есть порода предметов, которые имеют атрибуты:

breed [ items item]
items-own [
attr1 
attr2
]

Таким образом, у продавцов есть каталоги, элементы списка каталогов, а элементы имеют атрибуты.

Мне не ясно, кто такие "клиенты" или какие у них атрибуты. Они кажутся просто другими продавцами, которые имеют ссылки на данного продавца. Это верно?

В любом случае, вы спросили

Я хотел бы знать, сколько клиентов из его окрестностей выбрали этот товар).

Фраза«его предмет» подразумевает, что предметы должны иметь некоторый дополнительный атрибут, например «создатель». В любом случае, вы не описываете, что означает, что клиент «выбрал» элемент, или где вы храните такую ​​информацию, или где вы храните историю того, кто когда-либо выбирал элемент в прошлом - так что это невозможнодать совет по этому вопросу.

Вы также спрашиваете, почему это происходит:

Я получаю только пустые списки, когда я запускаю show catalogue в наблюдателе.

Ну, «каталог» - это не глобальная переменная, это атрибут продавцов. Вам нужно проверить продавцов, чтобы увидеть, есть ли у них каталоги с правильным товаром или предметами в них, или спросить что-то вроде

ask sellersA [ show catalog ]

, но, более вероятно, вы хотите открыть окно инспектора и оставить его открытым, чтобыВы можете наблюдать за происходящим.

inspect one-of sellersA

Но, как бы вы это ни делали, вы все равно можете обнаружить, что ни у одного продавца нет каталогов с какими-либо предметами в нем. Вы должны посмотреть, были ли созданы какие-либо элементы, поскольку они являются глобальными, и вы должны иметь возможность видеть их в наблюдателе, или проверять их, или просто считать их.

На самом деле я не понимаю, каккод, который вы перечислили выше, может сработать. Ваш код имеет

[ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function1 (1 + attr2)
      ]

, где selected_one - продавец, который не владеет атрибутами или функциями. Вы не находитесь в контексте элемента, поэтому я ожидаю, что команда "set attr" потерпит неудачу. Может быть, этот код молча терпит неудачу, поэтому у вас нет элементов.

После запуска кода есть ли созданные элементы?

...