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 #
########

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

These are gates which are constructed by physically combining the two gates to get a specific output.


ANDOR

This gate will evaluate if either of x AND statements are TRUE. This gate is built as a straight line similar to the AND gate.

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


NANDOR

Reconfigured ANDOR gate, see ANDOR.

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


ORANDOR

This gate returns true if either A or B and either C or E is true.

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


ORANDAND

This gate returns true if either A or B is true, and E and C are true.

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


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

The development of more complex gates requires careful calibration of the path cost of each path to allow the gate to switch states correctly and display the correct result.

Сумматоры

A full adder can be made as a Compound Fusion gate, by combining AND, ANDOR, and OR gates


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

A binary adder is constructed of two or three "sum" gates and a purge path. A half adder only adds two numbers and only needs two sum gates, 1 and 2. Full adders using carry to allow chaining require three sum gates, 1,2 and 3. Because binary is base two that translates to 01,10,11 as the sums, when the second bit is a 1, the gate is "carrying" the value up to the next level.

When building the adder, the highest path must have the most preferential path to ground or it will not properly function.

Standalone adders (they don't carry into another adder) require 22 mechanisms, and 14 doors. Start adders (They feed into the next adder and include a carry) require 32 mechanisms, and 14 doors. Chain adders (The receive Carry, and pass a Carry bit up) require 32 mechanisms, and 14 doors The gates only take up 13x9 tiles each.

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

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

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

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

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

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

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

Вычитатель

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

Животные

Choosing the animal which works as the logic core for an animal logic systems is somewhat important, depending on your needs and the available animals. The main requirements are that the animal must be large enough to activate pressure plates and able to stay alive while locked up in a logic cell. As long as these conditions are met, pretty much anything will do as long as you can remember which animal belongs into which gate (to avoid designating the same animal for more than one pit).

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

A creature must have a size of 10,000 in order to trigger pressure plates at all. Everything smaller will not generate output. This excludes cats and many children of animals like puppies.

For reference, this List of creatures by adult size gives a full listing of average sizes of creatures, with relevant cutoffs for pressure plates already marked in.

Pigs and dogs are an easy choice as animals to use. They are heavy enough to trigger pressure plates if adolescent or adult. They will normally path to a meeting area. While they have other uses as war animals or a prime source of meat, they are fast-breeding domestic animals that can be brought on embark.

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

Children are presumed superior to adults due to an extra pathing goal (to their mother), but keep in mind that they are generally much smaller than adults and thus may be too small to activate pressure plates.

Female animals can become pregnant and have children, even if locked away far from others of their kind. Such children may disrupt the pathing of their mother or send signals by themselves. Grazers are likely to starve to death before you get any logic out of them.

Exotic animals undeniably add style to your computing zone. A GCS powered computer would be awesome. Such uses prevent other potential applications, like using the spider to create valuable silk. Flyers may ignore hatch-based logic blocks.

Вторженцы

Invaders such as elves or goblins will not work with any of the designs on this page, unless you managed to dehand them before capture-- securely closed doors are no barrier to them. Any mounts or warbeasts, on the other hand, might work, and exotics are unlikely to bear any children, and can be extraordinarily long-lived. Job cancellation may be a problem with more complicated designs. Invader animals path to the map edge following capture. Be careful of any flyers or building destroyers.


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

When it comes time to automate your systems the first thing you need to know is what needs to be automated and what should remain manual. An obsidian farm with completely autonomous control of the casting process is all well and good, until it drowns all your legendary miners when it prematurely triggers. All systems should have manual controls and failsafes to help avoid Fun (but because we all love Fun sometimes you forget to fully connect that emergency drain, or that failsafe system you built somehow failed.)

Once you know the steps you need in your system, it comes time to select the parts you need to automate, whether it be basic logic gates or more sophisticated multiple trigger systems.