Как исправить этот цикл, команда foreach добавляет все переменные, которые не должны

Я столкнулся с подобной проблемой, и это сработало для меня:

  const flavorExists = await Flavors.findOne({
    'flavor.name': { $regex: flavorName, $options: 'i' },
  });
1
задан Max Goessens 18 January 2019 в 13:36
поделиться

1 ответ

Причина, по которой ваша модель вычитает 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 для каждого хранилища и вместо этого отсортировать по этой переменной.

0
ответ дан JenB 18 January 2019 в 13:36
поделиться
Другие вопросы по тегам:

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