DRAKON.SU

Текущее время: Суббота, 27 Апрель, 2024 12:24

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 07 Июль, 2023 15:15 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
        Новая редакция
        Старую редакцию см. здесь.

Машина Кузьмина. (Управляемая недетерминированная машина Тьюринга)

Раcсчитывая, что читатель знаком с МТ, оформим описание останавливаясь на отличиях предлагаемой машины от МТ.
Машина Кузьмина представляет собой перечислимое множество ячеек (концептов) и перечислимое множество управляющих устройств (можно считать их головками, кому это удобно) назначение которых – адресация (активация) концептов. Номер концепта будем называть адресом.

Ячейка (а не головка как у МТ) имеет множество состояний S (возможно бесконечное). Пока событием будем называть состояние концепта. Это не противоречит интуитивному представлению о событии как о процессе изменения состояния потому что факт изменения состояния определяется анализом на принадлежность новому состоянию (истинность события), и зачастую событие имеет имя этого нового состояния.

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

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

Виды адресации

Адресация имеет 4 вида:
1. Адресация для чтения. Читает значение концепта. Генерирует событие «Чтение»
2. Адресация для записи. Записывает новое значение. Генерирует событие «Запись»
3. Адресация для выполнения. Генерирует событие «Выполнение»
4. Адресация для инициализации. Генерирует события «Инициализация» и «Выполнение».

Архитектура компьютера

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

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

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

В чем отличие?

Отличие становиться заметным, когда мы обращаем внимание на то, что у нас много процессоров и шин адресации.
В классической архитектуре программа выполняется так, как пишется. Последовательность операторов О1, О2…. Оn. которые изменяют состояние. Затем оператор If- анализирующий текущее состояние и переход в зависимости от текущего состояния.

У нас же переход осуществляется непосредственно в момент изменения состояния. И последовательность выполнения операторов зависит не от их порядка в тексте, а в порядке указанном парой событие – подписка.

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

Работу предложенной машины можно представить алгоритмом выполняемым несколькими исполнителями.

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

О каком порядке и последовательности может идти речь при ОДНОВРЕМЕННОМ процессе. В общем случае МК гарантирует только порядок выполнения пары событие-подписка и назовем такую модель выполнения А-ритмом.

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

Если концепты в группе –значения, то имя концепта имеет еще два смысла. В операторах как значение концепта с индексом, а при формировании подписки обозначают событие, заключающееся в равенстве переменной этому значению. Рассмотрим на примере определения типа Boolean.

Boolean

Определим тип Boolean как именованную группу (имя группы непосредственно после открывающей скобки без пробела) из двух концептов типа токен (4 разряда) с именами "!" и "¬" и значениями 0 и 1:
{Boolean Token {"!" 0 #True.» "¬" 1 #False. »}}
Теперь для переменной F определенной ниже с начальным значением -!
Boolean F ! #Определение переменной типа Boolean и присвоение значения Истина. »
Формирование подписки на событие True.
F ! ((a +b) (F= ¬)) #По значению истина складываем a +b. И присваиваем значение False.»

Аналог оператора If:
F {! a+b ¬ a-b) #По значению истина складываем a+b. Иначе a-b.»
Знаки «!» и « ¬»являются значениями в операторе и событием.
Так же с помощью группы определим события, заложенные в архитектуре машины.

Определение событий адресации. Класс «|»

Event "|" Token { "←" 0 #Запись» "→" 1 #Чтение» "|" 2 # Выполнение» ":" 3 #Инициализация» }
Compare
{Compare Token { "=" 0 #Равно»">" 1 #Больше.» "<" 2 #Меньше.» }}

Определение событий данных. Класс «:»

Event ":" Token {"_" 0 #Отсутствует значение.» "=" 1 # Ноль» ">" 2 # Положительное.»
"<" 3 #Отрицательное.» Even 4 #Четное» Uneven 5 #Не четное» "~" 6 #Изменение значения.» }


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

Более подробно можно посмотреть в ролике здесь https://www.youtube.com/watch?v=-ftPk409-6U
Там же введение в программирование недетерминированной машины. И попытка объяснить разницу между блок схемой и А-Ритмом.

А здесь методы мышления в программировании. https://www.youtube.com/watch?v=iX7_JU2OTlI


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Июль, 2023 17:24 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
Хотел бы объяснить появление этой темы в Драконе. Да и мой интерес к графическому языку и блок-схемам. Мне кажется, что блок-схему,( да и любой императивный язык) не для всех задач удачно применять. Особенно к распараллеливаемых процессах. Стрелочки соединяющие иконки показывают путь выполнения. А моделируемый объект может состоять из нескольких исполнителей. Я долго думал чего б предложить для такого случая и вот придумал А-схему. Там на ролике можете посмотреть, как это работает. И как думается. Здесь есть хорошие специалисты проработавшие эту тему. Думаю, как "идея" для развития годится. Кстати, предусмотрен и автоматический перевод из текстового в графический язык. Я его А-язык назвал. Всем спасибо)
P/S/ Кто-то хотел посмотреть транслятор. https://www.youtube.com/watch?v=k1OFyMKxy2w


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 10 Июль, 2023 08:09 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
Мне кажется..

Что мешает рисовать на блок-схеме и запускать параллельно несколько действий? Ни разу не встречал запрет на такое изображение. Думаю, что и Дракон такое не запрещает.
В ПЛК для изображения процессов есть язык SFC, в котором изначально заложено изображение и (квази)параллельное исполнение нескольких ветвей. Единственное ограничение- это количество одновременно исполняемых параллельных процессов.
ИМХО, проблема высосана из пальца.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 10 Июль, 2023 14:56 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Что мешает рисовать на блок-схеме и запускать параллельно несколько действий? Ни разу не встречал запрет на такое изображение. Думаю, что и Дракон такое не запрещает.
ИМХО, проблема высосана из пальца.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Июль, 2023 08:33 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
Проблема визуализировать связь запусков на этих параллельные процессов.

Первый раз слышу, что это стало проблемой. Может, теорию и примеры реализации изучить?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Июль, 2023 12:24 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Первый раз слышу, что это стало проблемой. Может, теорию и примеры реализации изучить?
Это очевидно.
Простой пример попробуйте нарисовать блок схему с тремя последовательными процессами а, б и в запускающие (каждый) параллельные процессы г и д. Очень интересно как вы будете изображать возвраты из процессов г и д. У меня этой проблемы нет потому что и адреса возврата нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 06:40 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
У меня этой проблемы нет потому что и адреса возврата нет.

Этой проблемы нет ни у кого, кроме Михаила Кузьмина.


Вложения:
Screenshot_34.jpg
Screenshot_34.jpg [ 114.2 КБ | Просмотров: 1625 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 07:47 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Этой проблемы нет ни у кого, кроме Михаила Кузьмина.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 08:19 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
Только я б не сказал что это наглядно даже в таком банальном случае.

Лет сорок уже люди пользуются SFC и находят его наглядным и удобным.
Цитата:
атем оператор If- анализирующий текущее состояние и переход в зависимости от текущего состояния.

Давно уже не переходят. Про условное исполнение слыхали?
Цитата:
Т.е. обычную программу можно представить в виде алгоритма (или блок-схемы) выполняющейся пошагово. Т.е. одним исполнителем.

Работу предложенной машины можно представить алгоритмом выполняемым несколькими исполнителями.

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

Н-да... Ещё раз предложу изучить работу классических ПЛК по стандарту ГОСТ Р МЭК 61131-3 и особенно внимательно изучить язык SFC.

Остальное дальше комментировать лень, ибо это просто описание шагового режима работы ПЛК, правда, без понимания ТС принципов, по которым порядок выполнения инструкций строго детерминирован.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 09:22 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Первый раз слышу, что это стало проблемой. Может, теорию и примеры реализации изучить?

Мне кажется вы не поняли саму проблему. На моем первом ролике где рядом блок-схема и а-схема разберитесь подробно как работает машина. Для того я и рядом их поставил что б была наглядна разница работы моей машины и классической машины. Может я сам не "нащупываю" точно эту разницу. Раньше я думал что это даже не алгоритм. Даже тут возник небольшой спор. Сейчас я ближе к мысли что это все-таки алгоритм, но решаемый несколькими исполнителями. И изобразить блок-схемой его сложно. Буду очень признателен если вы поможете приблизиться к истине.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 09:26 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Лет сорок уже люди пользуются SFC и находят его наглядным и удобным.
Это не аргумент. Кроме того, я (мы) здесь обсуждаем и думаем. Никакое мое мнение не железное и меняется. Я уже сам не со всем что писал (и что вы цитируете) согласен. Это скорее вопросы для проработки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 10:09 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
И изобразить блок-схемой его сложно.

Не понимаю, в чём сложность изобразить параллельный алгоритм.
Сложность может возникнуть только тогда, когда язык, на котором это изображается, не имеет таких примитивов как "задача" (или "поток управления") и объектов синхронизации.
А вообще, если изначально предполагается использование параллельных алгоритмов, то это это должно решаться (и решается на практике) на уровне языка программирования, а не витиеватых графов в программе пользователя. Так получается проще для всех, и для пользователя, и для разработчика среды исполнения таких программ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 12:05 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Сложность может возникнуть только тогда, когда язык, на котором это изображается, не имеет таких примитивов как "задача" (или "поток управления") и объектов синхронизации.
А вообще, если изначально предполагается использование параллельных алгоритмов, то это это должно решаться (и решается на практике) на уровне языка программирования, а не витиеватых графов в программе пользователя. Так получается проще для всех, и для пользователя, и для разработчика среды исполнения таких программ.

Я не хочу спорить вообще о понятии сложность. Одному сложно, другому нет. Я вижу так, вы видите эдак. И дело привычки. Вопрос формулируется по другому. Я придумал фигню, которая работает вот так, как я рассказал. Способна работать на параллельных шинах и процессорах. Оставим даже вопрос алгоритм это или нет, но оно работает и я ищу варианты графического представления. Блок-схема не устраивает. Вот пытаюсь разобраться, и предлагаю свои варианты. Т.е. тема близкая Дракону. Здесь и ищу опытных и умных собеседников. Может я окажусь полезным для кого-то, может вы мне. Для меня очень важно.
Кстати, да. С языком получилось проще. Но, не теряю надежд.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 20:16 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
Михаил Кузьмин писал(а):
На моем первом ролике где рядом блок-схема и а-схема
Михаил, нужно дать ссылку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 14 Июль, 2023 07:40 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
Владимир Паронджанов писал(а):
Михаил Кузьмин писал(а):
На моем первом ролике где рядом блок-схема и а-схема
Михаил, нужно дать ссылку.
Не догадался. https://www.youtube.com/watch?v=-ftPk409-6U 12 мин. 33 сек
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Июль, 2023 12:28 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
Михаил Кузьмин писал(а):
Я придумал фигню

Как это понимать?
Фигня — что либо незначительное, не заслуживающее внимания; ерунда, чепуха.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 17 Июль, 2023 06:50 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Владимир Паронджанов писал(а):
Как это понимать?

Очень просто: человек не удосужился даже изучить, что в этой области уже сделано и используется, якобы что-то изобрёл, хотя этому что-то уже сто лет в обед, навесил свою терминологию, чтоб никто не догадался о его банальной неосведомлённости в вопросе, а сейчас пытается прифигачить к этому ещё и Дракон.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Июль, 2023 13:41 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Очень просто: человек не удосужился даже изучить, что в этой области уже сделано и используется .
В области Блок-схем? Новое? Нового ничего . А проработано хорошо.
tonyk писал(а):
якобы что-то изобрёл, хотя этому что-то уже сто лет в обед, навесил свою терминологию, чтоб никто не догадался о его банальной неосведомлённости в вопросе, а сейчас пытается прифигачить к этому ещё и Дракон.
Я предложил один вариант на рассмотрение и обсуждение. У себя я так и делаю. А вы можете применять можете не применять. Советую все-таки разобраться. Хотя бы для себя.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Июль, 2023 06:05 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Михаил Кузьмин писал(а):
Советую все-таки разобраться.

Разобраться в чём? В том, что уже давно есть и используется, более того, на что есть ГОСТ Р МЭК.
А вообще, если человек не понимает, как описывать параллельные процессы, то, ИМХО, не стоит ему браться за их описание хоть на Драконе, хоть на чём.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Июль, 2023 19:07 

Зарегистрирован: Понедельник, 15 Июнь, 2020 19:38
Сообщения: 179
tonyk писал(а):
Разобраться в чём? В том, что уже давно есть и используется, более того, на что есть ГОСТ Р МЭК.
А вообще, если человек не понимает, как описывать параллельные процессы, то, ИМХО, не стоит ему браться за их описание хоть на Драконе, хоть на чём.

Меня не все устраивает несмотря на то, что есть гост. И даже показал что именно не устраивает. Видно, я недостаточно доступно объяснил. Когда созрею как еще показать вернусь к этому вопросу. Принципиальная разница в том, что вы подходите со стороны процессов и есть некий механизм (программный) который в заранее определенных точках запускает параллельные процессы. Что и зафиксировано согласно ГОСТу. А я предлагаю подходить со стороны нескольких исполнителей выполняющих нечто одно. И исполнители сами выбирают как, когда и какие процессы выполнять. Откуда их запускать. Нет даже нужды определять процессы как параллельные. Они по факту текущего состояния выполняются параллельно или нет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB