Как выбрать элемент с наибольшим значением в списке - PullRequest
0 голосов
/ 27 октября 2019

У меня есть список для каждой черепахи, которую я рассматриваю в своей модели. Я хотел бы выбрать элемент списка, в частности, элемент с наивысшим качеством. Качество является параметром в диапазоне [0,1]. Мои проблемы касаются того, как назначить параметр каждому элементу, а затем выбрать элемент с наибольшим значением параметра.

Чтобы лучше объяснить : пример списка - (item 4, item3, item2, item1). Что я хотел бы: пункт 4 с качеством #, пункт 3 с качеством # и так далее. Когда я создаю элементы списка, у них есть параметр качества (он принадлежит черепахе): (quality random-float 1). Тогда у меня должно быть что-то вроде этого: item4 0.2, item3 1, item2 0.2, item1 0.5. То, что я хотел бы выбрать, это элемент с наивысшим качеством, т.е. item3 с качеством, равным 1.

Чтобы назначить параметр, я подумал:

ask one-of turtles
     [
      ifelse empty? mylist
        [
          set quality random-float 1
          ...
        ]
     ]

Я не знаю, является ли это правильным способом присвоить атрибут элементу списка в Netlogo.

Шаги для выбора элемента:

  1. Выбор черепахи
  2. Убедитесь, что ее список не пуст
  3. Выберите элемент с наивысшим качеством из его списка

Исходя из них, я написал бы следующее:

let mylist [ item4 item3 item2 item1 item0 item6] 
let max-value max mylist 
let max-index position max mylist 

Проблема в том, что я не уверен, что выбираю товар с самым высоким качеством, потому что яне совсем уверен, что правильно назначаю качество предмету.

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

1 Ответ

1 голос
/ 27 октября 2019

Учитывая, что у вас есть структура, которая объединяет все свойства элемента (ItemID, ItemName, ..., ItemValue) и массив Items.

Item(ItemID, ItemName, ..., ItemValue) // these are the proprieties of our object Item
Item arr_items[NB_ITEMS] //  the array (list) of items you have

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

Псевдокод:

// Lets assume your array of items is called "arr_items"
// Lets also assume indexing start from 0
index_max  = 0 // first index
for i = 0 to length(arr_items) - 1: // loop though all items
    // if the current ith item have ItemValue bigger than index_max's items ItemValue 
    if arr_items[item_max].ItemValue > arr_items[i].ItemValue then 
        index_max = i // then change index_max to be i
return index_max  // return the index of the item with the highest value
...