Size: a a a

2021 January 17

A

Aragaer in Haskell Start
это если экшнов всего два. Я выше написал, что экшнов больше, причем чтобы не делать вообще все, из текущего мира выбирается список, какие имеет смысл делать.
источник

к

кана in Haskell Start
если экшенов больше, то это просто будет список степеней

не зная что за функции, выбрать какую-то стратегию вроде бы нельзя, только перебирать все комбинации степеней

[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[1, 0, 0]
[1, 0, 1]
[1, 1, 0]
[1, 1, 1]
[0, 0, 2]
...
источник

A

Aragaer in Haskell Start
да. Поэтому я делаю поиск, мне находится много решений, из которых я уже потом внешним кодом выбираю наиболее подходящее
источник

A

Aragaer in Haskell Start
я беру исходный мир, получаю список разных действий, которые "можно было бы сделать на первом шаге". Отсюда (монада список мне как раз это и позволяет делать) я делаю ветвление и получаю список действий, которые бы можно было сделать на втором шаге
источник

A

Aragaer in Haskell Start
если на первом доступны [a, b], то ветвление. На втором могут быть доступны [b, c] либо [a, b, d]. Из этого просто монадой список я бы получил 6 комбинаций, но поскольку я знаю о коммутативности действий (или точнее я опираюсь на равенство миров), то есть одна дублирующаяся пара и комбинаций остается только 5.
источник

к

кана in Haskell Start
интересно, а как задается список возожных шагов?

Выше про это не было ни слова, только комбинации статичных функций
источник

A

Aragaer in Haskell Start
Переслано от Aragaer
ок, тогда еще более конкретно. Функция listActions :: World -> [World -> World]
источник

A

Aragaer in Haskell Start
может быть потерялось в обсуждении
источник

к

кана in Haskell Start
а есть возможность задавать функциям имена?
источник

к

кана in Haskell Start
или это динамический список без конкретных функций?
источник

A

Aragaer in Haskell Start
прямо сейчас - второе. Реально даже планируется вычитывать некоторый конфиг и строить разные действия на основе его содержимого
источник

A

Aragaer in Haskell Start
перечислить все возможные действия наверно можно, но мне не кажется разумным
источник

к

кана in Haskell Start
я к тому, что если бы задачу можно было бы свести к чисто символьной, не используя World вообще, то мб было бы проще
источник

A

Aragaer in Haskell Start
боюсь, что не сводится
источник

A

Aragaer in Haskell Start
и наверно я все-таки соврал про то, что функции совсем полностью коммутируют. Это не всегда правда. А вот миры действительно могут совпадать в подавляющем большинстве случаев.
источник

A

Aragaer in Haskell Start
вообще, мне не очень интересны даже сами действия, мне нужно найти мир, который удовлетворяет некоторому условию "окончания". Действия в listActions подобраны так, что каждое из них заведомо приближает к окончанию (то есть бесконечных действий не будет).
источник

A

Aragaer in Haskell Start
каждая ветка поиска рано или поздно завершится. Если бы я мог прикрутить отсечение совсем затянувшихся веток, было бы совсем хорошо.
источник

к

кана in Haskell Start
раз каждое действие гарантированно приближает, то если бы можно было еще как-то непрерывно описать действия и как они приблажаются к результату, то звучит немного как задача машинного обучения (ну точнее в целом задача оптимизации функции), возмжоно генетических алгоритмов, но listActions все портит
источник

A

Aragaer in Haskell Start
ммхм. Ну вот собственно как, чуть упрощенный вариант. Внутри мира есть некий Map a Int. Условие завершения - все значения неотрицательны. Каждое действие увеличивает на какое-то число одно из полей, но уменьшает несколько других (циклов нет). Если бы для каждого поля было бы ровно одно доступное действие, то и ветвлений можно было бы избежать. Но для некоторых полей действий больше одного.
источник

A

Aragaer in Haskell Start
перечень полей, а также полный список действий вычитывается из конфига при запуске.
источник