Документация Engee
Notebook

Бинарная логика

В данном примере мы исследуем применение бинарной логики для решения логических задач, используя уравнение, написанное на языке программирования Julia, и его реализацию в модели.

Бинарная логика – это форма логики, основанная на работе с двумя состояниями: истина (1) и ложь (0). Она используется для описания и решения задач, где результаты можно выразить в терминах «да» или «нет». Бинарная логика широко применяется в компьютерных системах, цифровой электронике и программировании.

Логические задачи – это задачи, решение которых связано с применением логических операций, таких как «И» (AND), «ИЛИ» (OR), «НЕ» (NOT) и их комбинаций. Такие задачи часто возникают в области автоматизации, проектирования цифровых схем и программирования.

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

Описание бинарного уравнения

Зададим состояния нашей системы, которых в данном случае будет три: 𝐴, 𝐵 и 𝐶. При этом состояние 𝐴 будет определяться случайным образом: если случайное значение 𝑋 больше 0.5, то 𝐴 истина, иначе ложь.

In [ ]:
X = rand()
println("X = $(X)")
A = X > 0.5
println("A = $(A)")
X = 0.7960830917866893
A = true
In [ ]:
B = false
C = true
println("B = $(B)")
println("C = $(C)")
B = false
C = true

Теперь перейдём к описанию уравнения. Предположим, что наша логика определяется следующим уравнением: Z = ((A and B) or (C and B)).

In [ ]:
Z = ((A && B) || (C && B))
println("Z = $(Z)")
Z = false

Теперь по этому уравнению построим модель и сравним результаты моделирования и результаты, полученные в модели. image.png

Вспомогательные функции

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
    
    Path = (@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    sleep(5)
    return model_output
end

Моделирование бинарной логики

In [ ]:
run_model("Logical_Operator") # Запуск модели.
Z_model = collect(Z_model)
println("Z_model = $(Z_model.value[1])")
Building...
Progress 100%
Progress 100%
Z_model = false

Выполним проверку, сравнив результаты моделирования и результаты, полученные при расчётах в Engee.

In [ ]:
println((Z_model.value[1]) == Z ? "Проверка пройдена" : "Результаты не совпали")
Проверка пройдена

Вывод

В результате исследования была продемонстрирована работа бинарной логики на примере уравнения, реализованного на Julia и в модели. Заданные состояния системы (𝐴, 𝐵, 𝐶) корректно отрабатываются, а логические операции выполняются согласно описанию. Проверка показала, что модель и код совпадают, и система функционирует без ошибок.

Блоки, использованные в примере