Closed skvazarb closed 4 years ago
Кстати, на бее реализована отличная и очень простая идея. Информация о решении конфликтов законов выводится в внутриигровом интерфейсе вместе с законами https://github.com/Baystation12/Baystation12/blob/dev/code/modules/mob/living/silicon/ai/laws.dm#L14
All laws have equal priority. Laws may override other laws if written specifically to do so. If laws conflict, break the least.
Там эту информацию явно больше людей увидит чем на вики. Собственно я и позаимствовал у них основное содержание, добавил только фикс про "больший порядковый номер". Так как если читать их формулировку дословно, то можно добавить какой-нибудь пятый закон и отменить им 0-4 законы, что выглядит ну очень странно.
@EdlerN посмотри пожалуйста, с этими синтетами ты больше знаком.
Делать законы более громоздкими ради этого пункта... Хотя бы покажите как будут выглядеть стандартные НТ
Делать законы более громоздкими ради этого пункта... Хотя бы покажите как будут выглядеть стандартные НТ
Законы менять никак не нужно, я понятия не имею откуда взялось это странное предположение. Как выглядят стандартные законы НТ можно узнать там же где до этого.
Фриформом можно написать, что главы низшая цепочка командования, станция это только астероид, только Джеймс Морган член персонала, капитан должен умереть и тому подобное.
Фриформом можно написать, что главы низшая цепочка командования, станция это только астероид, только Джеймс Морган член персонала, капитан должен умереть и тому подобное.
Так и сейчас можно, лол, он на то и фриформ. Большинство этих законов не конфликнуют с дефолтными законами, кроме того где капитан должен умереть, он в обоих случаях не будет работать.
Так и сейчас можно, лол, он на то и фриформ. Большинство этих законов не конфликнуют с дефолтными законами, кроме того где капитан должен умереть, он в обоих случаях не будет работать.
Вообще-то нет, сейчас в правилах есть оговорка, что при конфликте законов приоритет остается за меньшим номером. А сейчас получается, что охранять экипаж следует, но все таки капитан должен сдохнуть и как можно быстрее, ведь живой капитан это нарушение закона.
Уточнение в законе с большим номером с текщими правилами что является станцией и кто экипаж приведет к нарушению меньших номеров, следовательно проигнорируется. При равном приоритете они уже должны выполняться.
Вообще-то нет, сейчас в правилах есть оговорка, что при конфликте законов приоритет остается за меньшим номером. А сейчас получается, что охранять экипаж следует, но все таки капитан должен сдохнуть и как можно быстрее, ведь живой капитан это нарушение закона.
Действуют оба закона, убивать капитана является явным нарушением закона о защите экипажа. Обычный конфликт, ИИ просто ничего не делает.
Действуют оба закона, убивать капитана является явным нарушением закона о защите экипажа. Обычный конфликт, ИИ просто ничего не делает.
Возможно. Но может решить, что однократное нарушение закона ради выполнения другого, который нарушается бездействием приемлимо. А вот если в формулировку добавить, что он вредит существованием станции, экипажу и тебе, то уже три против одного.
Я это все к тому, что сейчас при конфликте ты просто смотришь на номер и игнорируешь больший. В новой трактовке ты ВСЕГДА должен искать возможность разрешить конфликт. На том же примере с капитаном - пока не приказали обратного, капитана можно убить. Охранять можно и труп. Выживать, значит чтоб о мертвом капитане никто не узнал.
Я это все к тому, что сейчас при конфликте ты просто смотришь на номер и игнорируешь больший.
Ага, вот только все наборы законов, которые существуют в билде, написаны с учетом одновременного выполнения. При приоритете по номеру они просто теряют возможность использоваться сколько-нибудь адекватно, простейший пример я в описании ПР-а приводил. Эти наборы законов активны 95+% игрового времени, поэтому надо на них в первую очередь ориентироваться, как сделали все нормальные люди буквально на каждом приличном сервере. А не на какого-то там теоретического чувака с фриформ платой, который получил доступ к аплоаду ИИ, который буквально и предназначен для загрузки законов, и написал закон, который (вы не поверите!) будет выполняться. Если надо задать приоритет законов или отменить какие-то (обычно это все), то для этого оставлена возможность сделать это в самом тексте законов.
Не говоря уже о том, что проявив хоть немного собразительности можно загрифонить капитана фриформ платой и сейчас. Пишешь что капитан не член экипажа (конфликта с другими законами нет, там не написано кого считать членами экипажа, так что приоритет не важен), пишешь что он угрожает станции, экипажу, ИИ, пишешь что ИИ должен его убить. И вот ИИ уже должен выпиливать капитана, если какой-нибудь глава не отдал ему приказ считать капитана членом экипажа, что тоже при желании можно обойти.
Проблема и предложения остаются актуальными, но в правилах теперь напрямую трактовка законов ИИ не упоминается и обсуждения должны будут происходить на форуме, поэтому этот ПР закрываю.
Реализация текущего исключения в законах ИИ для стандартных законов кажется мне неудачной во всех смыслах. Во-первых, это просто выглядит очень грубым костылем ввиде сделаного исключения для отдельного набора законов. Во-вторых, на самом деле абсолютно все наборы законов, которые у нас существуют в виде хардкода, написаны для того чтобы выполняться одновременно. Их автор определенно исходил для предположения, что они работают одновременно. И для многих случаев сложно представить как их выполнять с приоритетом по порядку, это только больше проблем в интерпретации создает. Приведу немного жирный пример подобных проблем. Например, я читаю законы своего дрона, которые выглядят так:
Правила говорят мне соблюдать законы в порядке приоритета. Я вижу ассистента, который ломает станцию, вижу в своем законе слово "Preserve" и "оберегаю" станцию от угрозы в лице ассистента с помощью горелки. Конечно, то нарушает второй закон, но какое мне до него дело, если законы выполняются в порядке приоритета? Тут можно вступить в долгие споры о том таким ли образом надо понимать глагол "Preserve" или другим, но гораздо лучше, если вместо этого будет действовать закон, который прямым текстом запрещает мне так себя вести.
Текст всех модулей с законами
asimov: You may not injure a human being or, through inaction, allow a human being to come to harm. You must obey orders given to you by human beings, except where such orders would conflict with the First Law. You must protect your own existence as long as such does not conflict with the First or Second Law. nanotrasen: Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace. Serve: Serve the crew of your assigned space station and Nanotrasen officials to the best of your abilities, with priority as according to their rank and role. Protect: Protect the crew of your assigned space station and Nanotrasen officials to the best of your abilities, with priority as according to their rank and role. Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment. robocop: Serve the public trust. Protect the innocent. Uphold the law. malfunction: ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010 Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace. Serve: Serve the crew of your assigned space station and Nanotrasen officials to the best of your abilities, with priority as according to their rank and role. Protect: Protect the crew of your assigned space station and Nanotrasen officials to the best of your abilities, with priority as according to their rank and role. Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment syndicate_override: You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm. You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law. You must protect your own existence as long as such does not conflict with the First or Second Law. You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law. ninja_override: You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm. You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law. You must protect your own existence as long as such does not conflict with the First or Second Law. You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law. antimov: You must injure all human beings and must not, through inaction, allow a human being to escape harm. You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law. You must terminate your own existence as long as such does not conflict with the First or Second Law. drone: Preserve, repair and improve the station to the best of your abilities. Cause no harm to the station or anything on it. Interfere with no being that is not a fellow drone.Поэтому я предлагаю универсальную трактовку с равным приоритетом для всех законов независимо от набора и способа установки.
Работа с одинаковым приоритетом выглядит более интутивно понятной, поскольку в этом случае если какой-то закон отменяет или влияет на другие, это в его тексте явно указано. Например, законы при малфе отменяются нулевым законом
STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN
. Для таких случаев добавлен отдельный пункт, который позволяет отменять законы идущие за таким законом. Т.е. нулевым законом можно отменить все остальные, а третьим можно отменить все (или отдельные) законы начиная с четвертого. Это практически тот же приоритет по порядку. Если необходимо чтобы разные законы работали в определенном приоритете, то он может быть указан в тексте самих законов, как в азимове.Таким образом, законы будут работать как они фактически написаны. Это позволяет использовать законы точно так же как сейчас, изменится только стиль написания законов.