Animal logic

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску

Животная логика функционирует за счет использования алгоритма поиска пути в Dwarf Fortress; все домашние животные стремятся найти кратчайший (наименьший) путь к желаемым целям (зона активности, родители, дварфы, ценные предметы и т. д.). Кроме того, животные, как правило, продолжают идти через плотно закрытые двери, несмотря на то, что они не могут пройти. Это определяет разницу между животной и логикой существ: животная логика не нуждается в регулировании путей, фактически пройденных существом, а только в потенциальных путях. Используя эти особенности поиска пути животных, можно создавать очень сложные логические элементы.

Животная логика имеет три основных преимущества: скорость, компактность и упрощенные функции. Однако животная логика медленнее механической логики и менее надежна, чем жидкостная и механическая логика.

Определения

Для ясности здесь приведены определения терминов, используемых в логике животных:

Земля: Для простоты — место, куда животные производят поиск пути. Всегда слева, если специально не указано иное.

Очистка: Путь к земле без входов.

Цена пути: Количество шагов, которое животное должно пройти, чтобы достичь земли.

Совмещённый вентиль: Просто один или несколько логических элементов, встроенных в одну систему — это эффективно повторяет функциональность поставленных подряд обычных вентилей.

Составной вентиль: Вентили, которые используют два или более вентилей с разной стоимостью пути.

Вентиль AND: AND читает 2 или более входов и возвращает TRUE, если все они TRUE.

Вентиль NAND: NAND читает 2 или более входов и возвращает TRUE, если все они FALSE.

Вентиль ANDOR: ANDOR читает 2 или более входов и возвращает TRUE, если X-Y являются TRUE. (этот вентиль предназначен исключительно для животной логики и представляют собой одноэтапное слияние AND и OR)

Вентиль OR: OR читает 2 или более входов и возвращает TRUE, если какой-либо из них TRUE.

Вентиль NOT: NOT принимает один входной сигнал и инвертирует его в противоположное состояние.

Вентиль XOR: XOR читает 2 или более входов и возвращает TRUE, если какой-либо из них, но не все TRUE.

Вентиль NOR: NOR читает 2 или более входов и возвращает TRUE, если все они FALSE.

Вентиль XNOR: XNOR читает 2 или более входов и возвращает TRUE, если все они TRUE или все они FALSE.

Подробнее можно можно почитать на википедии.

Обозначения:

#: Стена
^: Нажимная плита
X: Шлюз, решётки, прутья, мост, и проч. (указывается отдельно для кадого случая)
D: Дверь, отпертая, но плотно закрытая (непроходимо для питомцев)
d: Дверь
Неуказанные здесь буквы: двери/шлюзы, решётки, прутья и проч., особые входы (обычно взаимозаменяемые, если не указано иное), обычно контролируемые механизмом
g: Земля, если нужно прояснить, где она
C: Либо вход на диаграммах, либо состояние переноса, если в сумматоре

Вентили всегда будут писаться с заглавной буквы так, как они указаны в здесь, например AND, OR, ANDOR, XNOR и т. д.

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

В любой логической системе есть три основных логических элемента: AND, OR и NOT. Логика животных может легко создавать все логические элементы и обрабатывать несколько входов-выходов, а также совмещённые вентили. Основная причина этого в том, что поиск пути всегда предпочитает кратчайший путь к земле, и, контролируя этот путь, вы можете контролировать животное внутри вентиля. Преимущество поиска пути животных заключается в том, что вентили могут иметь несколько состояний, допуская более одного сигнала ВКЛ или ВЫКЛ. Для простоты и оптимизации эти системы используют только двоичную информацию, но теоретически их можно заставить выполнять вычисления в десятичной или какой-либо другой системе; однако такие вентили невероятно сложны, и их очень сложно, если вообще возможно, построить.

Простые вентили

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

AND

Эти простые вентили сделаны путем помещения животного в прямой коридор; наземный путь будет иметь две или более дверей, подключенных к входу, тогда как второй, более длинный путь останется свободным. Вентиль можно настроить как NAND, просто переместив нажимную пластину. Если пластина находится на пути к земле, она работает как логический элемент AND, возвращающий ИСТИНА, если путь к земле открыт, а если пластина находится на пути очистки, она вернет ЛОЖЬ, когда входы будут ИСТИНА.

#########
 ABCD^ D
#########

Множественный AND

############
 ANYNUMD^ D
############

NAND

Переконфигурированный вентиль AND, см. AND.

#########
 ABCD ^D
#########

OR

Базовый вентиль возвращает ИСТИНУ, если любой из входных данных имеет значение ИСТИНА.

#####
AD^ D
B####
#####

Множественный OR

#######
A #####
N #####
Y D^ D
N #####
U #####
M #####
#######

NOR

По сути, это переконфигурированный вентиль ИЛИ.

#####
AD ^D
B####
#####

NOT

Самый простой вентиль, он принимает один входной сигнал и инвертирует его. ЛОЖЬ -> ИСТИНА, ИСТИНА -> ЛОЖЬ.

#######
 AD ^D
#######

Составные вентили

По сути, два или более вентилей расположенные с разной стоимостью пути к земле. Эти ворота можно настроить разными способами, этот самый простой. Возможно, можно сделать эти вентили раздельными, но для этого потребуется инвертировать часть входных данных. Простые составные вентили используют два простых вентиля и обрабатывают два входа; сложные составные вентили имеют более двух простых вентилей и требуют более двух входов. Сложный составной вентиль может использоваться для преобразования десятичных чисел в двоичные с использованием вентилей AND.

XOR

Соединение AND и OR, когда только один вход имеет значение ИСТИНА, возвращает ИСТИНА. Если A и B являются ЛОЖЬЮ, животное перемещается в положение ЛОЖЬ с помощью очистки, если A или B является ИСТИНОЙ, животное перемещается в положение ИСТИНА в вентиле OR , если оба A и B истинны, животное перемещается в положение ЛОЖЬ с помощью вентиль AND.

#g########
# ABD  D #
# ####^# #
# ####D# #
# ###BA# #
#        #
##########

Цена пути AND: 4
Цена пути OR: 10
Цена пути очистки: 14


XNOR

Обратное к XOR: возвращает ИСТИНА, если ОБА имеют значение ИСТИНА или ЛОЖЬ. Если A и B являются ЛОЖЬЮ, животное перемещается в положение ИСТИНА с помощью очистки, если A или B является ИСТИНОЙ, животное перемещается в положение ЛОЖЬ в вентиле ИЛИ, если оба A и B истинны, животное перемещается в положение ИСТИНА с помощью вентиля AND.

#g#########
#         #
##B###### #
###A## DA # 
####D^##B #
#####D### #
######    #
###########

Цена пути AND: 4
Цена пути OR: 10
Цена пути очистки: 15


Сложные составные вентили, дисплей восьмеричного АЛУ

Входы: 1, 2, 4, они соответствуют двоичным значениям входов; выходы: A, B, C, D, E, F, G, H — 0, 1, 2, 3, 4, 5, 6, 7 соответственно на дисплее вывода. Используется восьмеричный формат для простоты, но его можно легко масштабировать для работы с десятичным числом (до 10, кроме этого вам нужен преобразователь, а не набор if) или шестнадцатеричным (шестнадцатеричный формат будет легко обрабатывать, и, вероятно, его будет проще преобразовать в десятичный формат).

#################
                #
# # # # # # #1# #
# # #1# #1#2#2# #
#1#2#2#4#4#4#4# #
#D#D#D#D#D#D#D#D#
#               #
#################
# ######
# 1  D #
# #### #
# 2  D #
# #### #
# 12 D #
# #### #
# 4  D #
# #### #
# 14 D #
# #### #
# 24 D #
# #### #
# 124D #
# #### #
#    D #
########

Совмещённые вентили

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

ANDOR

Этот вентиль будет оценивать, является ли ИСТИННЫМ какое-либо из x утверждений AND. Вентиль построен в виде прямой линии, схоже с логическим вентилем AND.

######
#C####
ABD^ D
C#####
######

NANDOR

Переконфигурированный вентиль ANDOR, см. ANDOR.

######
#C####
ABD ^D
C#####
######

ORANDOR

Этот вентиль возвращает ИСТИНУ, если истинно оба ИЛИ: A или B и C или E.

######
AC####
BED^ D
######

ORANDAND

Этот вентиль возвращает ИСТИНУ, если A или B истинно, а также E и C истинны.

#######
A######
BCED^ D
#######

Сложные вентили

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

Сумматоры

Полный сумматор может быть выполнен в виде составного совмещённого вентиля путем объединения вентилей AND, ANDOR и OR.

Бинарный сумматор

Двоичный сумматор состоит из двух или трех "суммирующих" вентилей и пути очистки. Полусумматор складывает только два числа, и ему нужны только два суммирующих вентиля. Полные сумматоры, использующие перенос для построения цепочки, требуют трех суммирующих вентилей. Поскольку бинарный код имеет основание два, он преобразуется в 01, 10, 11 как суммы, когда второй бит равен 1, вентиль "переносит" значение на следующий уровень.

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

Одиночные сумматоры (они не переносятся в другой сумматор) требуют 22 механизмов и 14 дверей. Стартовые сумматоры (они передаются в следующий сумматор и включают в себя перенос) требуют 32 механизма и 14 дверей. Цепные сумматоры (прием переноса и передача бита переноса вверх) требуют 32 механизмов и 14 дверей. Вентили занимают всего 13x9 тайлов каждый.

Люковая логика

Люки могут использоваться во многих логических схемах для альтернативных конструкций. Люк над рампой служит дверью, которую невозможно пробить; люк над каналом действует как инвертированная дверь, блокируя путь в открытом, а не в закрытом состоянии. Хотя во всех конструкциях на этой странице для ограничения пути используются двери, осторожное использование люков может быть более эффективным для некоторых схем.

Справочные изображения

Десятичный сумматор

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

Шестнадцатеричный сумматор

Шестнадцатеричный сумматор работает на том же уровне, что и двоичный сумматор, однако он использует 64 элемента суммирования в диапазоне от 0 до 31. User:LordOOTFD разрабатывает прототип сумматора, который использует плавающий бит переноса для работы в качестве полного сумматора.

Вычитатель

Обратный сумматор, простой, но еще не проверенный.

Животные

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

Минимальный вес

Существо должно иметь размер 10 000, чтобы активировать нажимные пластины. Все меньшее не будет генерировать сигнал. Это исключает кошек и многих детёнышей, таких как щенки.

Для справки, этот Список существ по размеру взрослых дает полный список средних размеров существ с уже отмеченными соответствующими сокращениями для нажимных пластин.

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

Жизнеспособность

Предполагается, что дети лучше взрослых из-за дополнительной цели пути (к своей матери), но имейте в виду, что они, как правило, намного меньше взрослых и, следовательно, могут быть слишком маленькими, чтобы активировать нажимные пластины.

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

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

Захватчики

Захватчики, такие как эльфы или гоблины, не будут работать ни с одним из рисунков на этой странице, если только вам не удалось удалить им руки их перед захватом — надежно прикрытые двери не являются для них препятствием. С другой стороны, любые ездовые животные или боевые звери могут подойти, а экзотические вряд ли будут детёнышей и могут быть чрезвычайно долгоживущими. Отмена работ может стать проблемой для более сложных конструкций. Путь животных-захватчиков к краю карты после захвата. Будьте осторожны с летунами и разрушителями зданий.

Собираем все это вместе

Когда приходит время автоматизировать ваши системы, первое, что нужно знать, это то, что необходимо автоматизировать, а что следует оставить на ручном управлении. Обсидиановая ферма с полностью автономным управлением процессом отливки — это всё хорошо, пока при преждевременном срабатывании не утопит всех ваших легендарных шахтеров. Все системы должны иметь ручное управление и средства защиты от сбоев, чтобы избежать веселья (но поскольку мы все любим веселье, мы иногда забываем подключить аварийный слив, или построенная вами отказоустойчивая система по каким-то причинам выходит из строя.)

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