Как я помню, какой ПРЕДШЕСТВУЮЩИЙ окольный путь должен войти в ПОДКЛЮЧЕНИЕ запросами

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

Я думаю, что вы хотите это (оно помещает изменение стоимости в то же самое [], что произойдет до тестирования следующего возможного расширения):

to build-pipeline
  foreach sort-on [who] storages
  [ ifelse subsidy-port - pipeline-cost-extensible > 0
    [ set pipeline 1
      set subsidy-port subsidy-port - pipeline-cost-extensible
      create-link-from port 25
    [ set pipeline 0
      set subsidy-port subsidy-port  ; has no effect, can be deleted
    ]
  ]
end

Также, если единственная цель переменной конвейера чтобы быть 1 или 0, чтобы указать, должно ли быть построено расширение, это еще проще:

to build-pipeline
  foreach sort-on [who] storages
  [ if subsidy-port - pipeline-cost-extensible > 0
    [ set subsidy-port subsidy-port - pipeline-cost-extensible
      create-link-from port 25
  ]
end

В ваших комментариях вы указали, что существует порядок достоинств расширений конвейера. Почти всегда плохое кодирование использовать who в NetLogo. Переменная who - это просто порядок, в котором создаются хранилища, привязка к которому заслуживает, устраняет всю гибкость. Что произойдет, если позже вы захотите другой расчет заслуг? who не может быть изменено. Вероятно, вам нужно назначить переменную с именем merit для каждого хранилища и вместо этого отсортировать по этой переменной.

6
задан Nick Pierpoint 16 April 2009 в 10:26
поделиться

2 ответа

Думайте о порядке, в котором записи будут выбранными: столбец ссылки назад на каждой записи должен соответствовать столбцу ссылки вперед на ПРЕДШЕСТВУЮЩЕЙ выбранной записи.

1
ответ дан 17 December 2019 в 02:35
поделиться

Блок приложения кэширования EntLib имеет опцию очистки LRU из коробки и может быть в памяти. Это может быть немного тяжелым для того, что вы хотите.

Управляющие и ведомые таблицы могут быть не столь очевидными в JOIN , но это так же ясно, как колокол для запроса CONNECT BY : PRIOR приводится строка, а не PRIOR .

Вот почему этот запрос:

SELECT  *
FROM    hierarchy
START WITH
        id = :root
CONNECT BY
        parent = PRIOR id

означает «найти все строки, у которых parent является заданным id ]». Этот запрос строит иерархию.

Это можно рассматривать следующим образом:

connect_by(row) {
  add_to_rowset(row);

  /* parent = PRIOR id */
  /* PRIOR id is an rvalue */
  index_on_parent.searchKey = row->id;

  foreach child_row in index_on_parent.search {
    connect_by(child_row);
  }
}

И этот запрос:

SELECT  *
FROM    hierarchy
START WITH
        id = :leaf
CONNECT BY
        id = PRIOR parent

означает «найти строки, чей id является данным родительским » , Этот запрос создает цепочку предков.

Всегда ставьте PRIOR в правой части выражения.

Считайте столбец PRIOR как константу, во всех ваших строках будет производиться поиск for.

5
ответ дан 17 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: