|
|
|
OFF: Нейронка на 1С | ☑ | ||
|---|---|---|---|---|
|
0
maxab72
16.05.25
✎
11:03
|
Код нейронки на 1СПроцедура глНачальноеЗаполнениеСлоевИУзлов() Экспорт
НаборЗаписей = РегистрыСведений.Расчет.СоздатьНаборЗаписей();
НаборЗаписей.Записать(ИСТИНА);
Выборка = Справочники.Узлы.Выбрать();
Пока Выборка.Следующий() Цикл
текСпрО = Выборка.ПолучитьОбъект();
текСпрО.ПометкаУдаления = Истина;
текСпрО.Записать();
КонецЦикла;
Помеченные = НайтиПомеченныеНаУдаление();
Найденные = Неопределено;
УдалитьОбъекты(Помеченные, Ложь, Найденные);
Для каждого Ссылка из Найденные Цикл
СтрСообщения = "Объект не удален: " + СокрЛП(Ссылка[0]);
СтрСсылка = ", используется в " + СокрЛП(Ссылка[1]);
Сообщить (СтрСообщения + СтрСсылка);
КонецЦикла;
ВсегоСлоев = Константы.Слоев.Получить();
УзловВСлое = Константы.УзловВСлое.Получить();
// Входящие узлы 0-слоя
НоваяГруппа = Справочники.Узлы.СоздатьГруппу();
НоваяГруппа.Наименование = "Слой 000";
НоваяГруппа.Записать();
Группа = НоваяГруппа.Ссылка;
СпсУзловПредыдущегоСлоя = Новый СписокЗначений;
Для счУзлов = 1 По УзловВСлое Цикл
НовыйУзел = Справочники.Узлы.СоздатьЭлемент();
НовыйУзел.Родитель = Группа;
НовыйУзел.Наименование = "Узел 000." + Прав("000" + Строка(счУзлов), 3);
НовыйУзел.Слой = 0;
НовыйУзел.НомерВСлое = счУзлов;
НовыйУзел.Записать();
СпсУзловПредыдущегоСлоя.Добавить(НовыйУзел.Ссылка);
КонецЦикла;
// Узлы по слоям расчета
СпсУзловНовогоСлоя = Новый СписокЗначений;
Для счСлоев = 1 По ВсегоСлоев Цикл
НоваяГруппа = Справочники.Узлы.СоздатьГруппу();
НоваяГруппа.Наименование = "Слой " + Прав("000" + Строка(счСлоев), 3);
НоваяГруппа.Записать();
Группа = НоваяГруппа.Ссылка;
СпсУзловНовогоСлоя.Очистить();
Для счУзлов = 1 По УзловВСлое Цикл
НовыйУзел = Справочники.Узлы.СоздатьЭлемент();
НовыйУзел.Родитель = Группа;
НовыйУзел.Наименование = "Узел " + Прав("000" + Строка(счСлоев), 3) + "." + Прав("000" + Строка(счУзлов), 3);
НовыйУзел.Слой = счСлоев;
НовыйУзел.НомерВСлое = счУзлов;
Для каждого ЭлСпс Из СпсУзловПредыдущегоСлоя Цикл
стрВес = НовыйУзел.Веса.Добавить();
стрВес.Узел = ЭлСпс.Значение;
стрВес.Вес = 1;
КонецЦикла;
НовыйУзел.Записать();
СпсУзловНовогоСлоя.Добавить(НовыйУзел.Ссылка);
КонецЦикла;
СпсУзловПредыдущегоСлоя.Очистить();
Для каждого ЭлСпс Из СпсУзловНовогоСлоя Цикл
СпсУзловПредыдущегоСлоя.Добавить(ЭлСпс.Значение);
КонецЦикла;
КонецЦикла;
// Узел результата
НовыйУзел = Справочники.Узлы.СоздатьЭлемент();
НовыйУзел.Родитель = Группа;
НовыйУзел.Наименование = "Узел результата";
НовыйУзел.Слой = ВсегоСлоев + 1;
НовыйУзел.НомерВСлое = 1;
Для каждого ЭлСпс Из СпсУзловПредыдущегоСлоя Цикл
стрВес = НовыйУзел.Веса.Добавить();
стрВес.Узел = ЭлСпс.Значение;
стрВес.Вес = 1;
КонецЦикла;
НовыйУзел.Записать();
КонецПроцедуры
Функция локПреобразоватьИзЧислаВДвоичноеЧисло(Знач Значение)
Результат="";
Пока Значение > 0 цикл
Остаток = Значение % 2;
Результат1 = Сред("01", Остаток+1, 1);
Значение = (Значение - Остаток) / 2;
Результат = Результат1 + Результат;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция локОбработатьВход(ВходящееЧисло = 0)
СписокЗначенийВходящий = Новый СписокЗначений;
ЧислоДвоичноеСтрокой = локПреобразоватьИзЧислаВДвоичноеЧисло(ВходящееЧисло);
УзловВСлое = Константы.УзловВСлое.Получить();
ПервыеНули = "0";
Для ЧЦ = 1 По УзловВСлое Цикл
ПервыеНули = ПервыеНули + "0";
КонецЦикла;
ЧислоДвоичноеСтрокой = Прав(ПервыеНули + ЧислоДвоичноеСтрокой, УзловВСлое);
ДлинаДвоичногоЧисла = СтрДлина(ЧислоДвоичноеСтрокой);
Для ЧЦ = 1 По УзловВСлое Цикл
СписокЗначенийВходящий.Добавить(Сред(ЧислоДвоичноеСтрокой, ЧЦ, 1));
КонецЦикла;
Возврат СписокЗначенийВходящий;
КонецФункции
Функция локНайтиУзелПоСлоюИНомеру(Слой, Номер)
Ответ = Справочники.Узлы.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Узлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.Узлы КАК Узлы
|ГДЕ
| Узлы.Слой = &Слой
| И Узлы.НомерВСлое = &Номер
| И Узлы.ПометкаУдаления = ЛОЖЬ
| И Узлы.ЭтоГруппа = ЛОЖЬ";
Запрос.УстановитьПараметр("Слой", Слой);
Запрос.УстановитьПараметр("Номер", Номер);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ответ = Выборка.Ссылка;
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция глРасчетУзла(Узел) Экспорт
Ответ = Ложь;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УзлыВеса.Узел КАК Узел,
| УзлыВеса.Вес * ЕСТЬNULL(Расчет.Значение, 0) КАК Значение
|ПОМЕСТИТЬ ТЗУзлы
|ИЗ
| Справочник.Узлы.Веса КАК УзлыВеса
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Расчет КАК Расчет
| ПО УзлыВеса.Узел = Расчет.Узел
|ГДЕ
| УзлыВеса.Ссылка = &Узел
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТЗУзлы.Узел) КАК КоличествоВходов
|ПОМЕСТИТЬ ТЗКоличествоВходов
|ИЗ
| ТЗУзлы КАК ТЗУзлы
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СУММА(ТЗУзлы.Значение) КАК СуммаВходов
|ПОМЕСТИТЬ ТЗСуммаВходов
|ИЗ
| ТЗУзлы КАК ТЗУзлы
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР КОГДА ТЗСуммаВходов.СуммаВходов >= ТЗКоличествоВходов.КоличествоВходов ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК Результат
|ИЗ
| ТЗКоличествоВходов КАК ТЗКоличествоВходов,
| ТЗСуммаВходов КАК ТЗСуммаВходов";
Запрос.УстановитьПараметр("Узел", Узел);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ответ = Выборка.Результат;
КонецЕсли;
Возврат Ответ;
КонецФункции // глРасчетУзла()
Функция глПроизвестиРасчет(ВходящееЧисло = 0) Экспорт
Ответ = 0;
СписокВходящий = локОбработатьВход(ВходящееЧисло);
ВсегоСлоев = Константы.Слоев.Получить();
УзловВСлое = Константы.УзловВСлое.Получить();
// Заполняем входящий нулевой слой
Для счУзлов = 1 По УзловВСлое Цикл
текУзел = локНайтиУзелПоСлоюИНомеру(0, счУзлов);
текЗначение = ?(СписокВходящий.Получить(счУзлов - 1) = "1", 1, 0);
НаборЗаписей = РегистрыСведений.Расчет.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Узел.Установить(текУзел);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Активность = Истина;
НоваяЗапись.Узел = текУзел;
НоваяЗапись.Значение = текЗначение;
НаборЗаписей.Записать(Истина);
КонецЦикла;
// Включаем думатель
Для счСлоев = 1 По ВсегоСлоев Цикл
Для счУзлов = 1 По УзловВСлое Цикл
текУзел = локНайтиУзелПоСлоюИНомеру(счСлоев, счУзлов);
текЗначение = глРасчетУзла(текУзел);
НаборЗаписей = РегистрыСведений.Расчет.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Узел.Установить(текУзел);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Активность = Истина;
НоваяЗапись.Узел = текУзел;
НоваяЗапись.Значение = текЗначение;
НаборЗаписей.Записать(Истина);
КонецЦикла;
КонецЦикла;
// Запускаем анализатор
текУзел = локНайтиУзелПоСлоюИНомеру(ВсегоСлоев + 1, 1);
текЗначение = глРасчетУзла(текУзел);
Ответ = текЗначение;
Возврат Ответ;
КонецФункции
Процедура глОбучение(Ответ, ПравильныйОтвет) Экспорт
ВсегоСлоев = Константы.Слоев.Получить();
СуммаСлоев = ВсегоСлоев * (ВсегоСлоев + 1) / 2;
// Выбираем исправляемые узлы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Расчет.Узел КАК Узел
|ИЗ
| РегистрСведений.Расчет КАК Расчет
|ГДЕ
| Расчет.Значение = &Ответ";
Запрос.УстановитьПараметр("Ответ", Ответ);
Выборка = Запрос.Выполнить().Выбрать();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Расчет.Значение КАК Значение
|ИЗ
| РегистрСведений.Расчет КАК Расчет
|ГДЕ
| Расчет.Узел = &Узел";
Пока Выборка.Следующий() Цикл
текУзел = Выборка.Узел.ПолучитьОбъект();
Если текУзел.Слой = 0 ИЛИ текУзел.Слой > ВсегоСлоев Тогда
Продолжить;
КонецЕсли;
Для каждого стрВеса Из текУзел.Веса Цикл
текУзелВход = стрВеса.Узел;
текРезультат = 0;
Запрос.УстановитьПараметр("Узел", текУзелВход);
ВыборкаРезультат = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
текРезультат = Выборка.Значение;
КонецЕсли;
Если текРезультат = Ответ Тогда
текДельта = ?(Ответ = ПравильныйОтвет, 1, -1) * текУзел.Слой / СуммаСлоев;
стрВеса.Вес = стрВеса.Вес + текДельта;
КонецЕсли;
КонецЦикла;
текУзел.Записать();
КонецЦикла;
КонецПроцедуры
Уже умеет отличать четные числа от нечетных. Если маленько допилить рашпилем, сможет управлять миром. |
|||
|
1
PLUT
16.05.25
✎
10:59
|
а следующее простое число умеет искать?
|
|||
|
2
maxab72
16.05.25
✎
11:03
|
(1) не учил. Отличать простое от не простого может, но пока с ошибками, мало учил.
и надо переделать анализатор, чтоб выдавал не просто да/нет, а число (увеличить число узлов с 1 до N в этом слое). |
|||
|
3
PLUT
16.05.25
✎
11:04
|
Наибольшим известным простым числом по состоянию на 2024 год является число Мерсенна 2136 279 841 − 1
© википедики |
|||
|
4
PLUT
16.05.25
✎
11:04
|
(3) ну вот как следующее найти, а х. его знает
|
|||
|
5
maxab72
16.05.25
✎
11:06
|
(4) совсем не сложно, берешь карандаш и лист бумаги и проверяешь все последующие число на делимость...
|
|||
|
6
PLUT
16.05.25
✎
11:14
|
(5) особенно если не собираешься это делать сам :)
|
|||
|
7
Злопчинский
16.05.25
✎
12:15
|
(5) хрен ли тут искать?
1 - простое, +2 =3 - простое, +2 = 5 - простое... методом индукции - к предыдущему простому добавляем +2 - получаем следующее простое. проверяем: 5 - простое, +2 = 7 - простое. Вуаля! |
|||
|
8
maxab72
16.05.25
✎
12:17
|
(7) пропустил 2 - оно тоже простое. то есть надо прибавлять не по 2, а по 1.
|
|||
|
9
PLUT
16.05.25
✎
12:20
|
а есть еще треугольные числа
Любое натуральное число представимо в виде суммы не более трёх треугольных чисел © Гаусс какой-то в 1796 году |
|||
|
10
Злопчинский
16.05.25
✎
12:21
|
(8)
|
|||
|
11
Злопчинский
16.05.25
✎
12:23
|
(9) вот они
|
|||
|
12
PLUT
16.05.25
✎
12:58
|
(7)
Число 1 — не является ни простым, ни составным числом, так как у него только один делитель — 1. Именно этим оно отличается от всех остальных натуральных чисел. Число 2 — первое наименьшее простое, единственное четное, простое число © тырнет |
|||
|
13
PR
16.05.25
✎
14:03
|
(7) Ну да, 7 + 2 = 9 тоже простое
Знаменитые простые числа Злопчинского |
|||
|
14
Garykom
гуру
16.05.25
✎
14:27
|
Интересно а существует ли формула/уравнение для простых чисел?
Чисто теоретически в виде кривой их можно представить, нечто вроде странной "синусоиды" |
|||
|
15
PLUT
16.05.25
✎
14:37
|
(14) школу прогуливал наверное?
много умов поломалось с поиском "формулы/функции" нахождения следующего простого числа... множество простых чисел бесконечно! © Евклид какой-то |
|||
|
16
Garykom
гуру
16.05.25
✎
14:43
|
(15) Если ты не понял сути то вероятно прогуливал не я
wiki:Синусоида тоже бесконечно пересекает ось абцисс для простых чисел чем дальше в стороны тем реже пересечения надо, волны разбегаются понятно речь о некой функции, которая приближенно отражает простые числа или на заданном интервале |
|||
|
17
PLUT
16.05.25
✎
14:45
|
(16) приближенно это как?
дроби не просто так существуют :) |
|||
|
18
PLUT
16.05.25
✎
14:47
|
вот тут про закономерности первая попавшаяся
https://habr.com/ru/articles/535124/ Риман какой-то формулу приближенную вывел Риман получил приближение, используя интегральный логарифм и нетривиальные нули дзета-функции Римана. Однако, это приближение верно, только если верна гипотеза Римана. Причём если гипотеза Римана верна, то оно является наилучшим. Гипотеза Римана до сих пор не доказана и не опровергнута ©пижжено оттуда |
|||
|
19
maxab72
16.05.25
✎
14:48
|
(16) гуглите дзета-функцию Римана.
|
|||
|
20
Garykom
гуру
16.05.25
✎
14:51
|
(18) (19) ага интересно
Также были выдвинуты гипотезы о возможной связи статистических свойств нетривиальных нулей дзета-функции Римана (а значит — и простых чисел) с явлениями квантовой физики, в частности — с квантовым хаосом |
|||
|
21
PR
16.05.25
✎
14:54
|
(14) Нет
|
|||
|
22
Garykom
гуру
16.05.25
✎
14:59
|
(21)
В 1735 году была установлена связь между простыми числами и π, когда Леонард Эйлер решил знаменитую Базельскую проблему
т.е. теоретически через Пи можно практически пока не придумали и не факт что придумают простую даже если придумают будет зависеть от точности некоего расчета |
|||
|
23
PLUT
16.05.25
✎
15:05
|
(22) криптоёптаграфия на простых числах построена
что произведение двух простых чисел (больших) известно, а вот результат этого произведения двух простых чисел обратно на два простых множителя разложить - а вот х.й вся надежда на квантовые компуктеры, когда много кубитов будет и скорость параллельных вычислений (ссуть перебор) будет огромной. может быть тогда... |
|||
|
24
Злопчинский
16.05.25
✎
16:14
|
(13) конечно 9 - простое. Или оно вызывает у вас сложности? ;-)
|
|||
|
25
Волшебник
16.05.25
✎
16:26
|
>> умеет отличать четные числа от нечетных
Функция Четное(а) Возврат а % 2 = 0; КонецФункции |
|||
|
26
PLUT
16.05.25
✎
16:28
|
все простые числа нечётные, кроме одного числа
|
|||
|
27
Fish
гуру
16.05.25
✎
16:30
|
(26) Но далеко не все нечетные числа - простые.
|
|||
|
28
PLUT
16.05.25
✎
16:31
|
(27) все лохлы - тридварасы, но не все тридварасы - лохлы :)
|
|||
|
29
maxab72
16.05.25
✎
16:32
|
(25) зато она это делает интеллектуально!
|
|||
|
30
hunter76
16.05.25
✎
16:35
|
(24) 9 делится на себя, на 1 и на 3
|
|||
|
31
Волшебник
16.05.25
✎
16:36
|
(29) зато она это делает неточно. Кому нужна нейронка, которая может ошибиться на простой вопрос?
|
|||
|
32
maxab72
16.05.25
✎
16:39
|
(31) зато со своей нечеткой логикой она (теоретически) может ответить на главный вопрос жизни, вселенной и всего такого.
|
|||
|
33
Fish
гуру
16.05.25
✎
16:41
|
(31) Человек тоже может ошибиться при ответе на простой вопрос. Кому нужны человеки?
|
|||
|
34
PLUT
16.05.25
✎
16:43
|
(33) врать нельзя, ошибиться можно
© цытаты великих |
|||
|
35
Fish
гуру
16.05.25
✎
16:46
|
(34) Кстати, как раз врать нейронки не умеют. Они всегда честны, даже когда несут полную чушь :))
|
|||
|
36
Krendel
16.05.25
✎
17:14
|
(35) квина, дипсик умеют, грок скорее всего уже тоже
|
|||
|
37
Timon1405
16.05.25
✎
18:52
|
(14) многочлен Матиясевича wiki:Простое_число
|
|||
|
38
maxab72
16.05.25
✎
20:03
|
(25) я переучил свою нейронку на умение отличать числа, имеющие в начале цифру 3 от остальных. Теперь переучите без кодирования свою функцию!
|
|||
|
39
Волшебник
16.05.25
✎
20:18
|
(38) Когда мне запрещают программировать, моя рука тянется к пистолету...
|
|||
|
40
maxab72
16.05.25
✎
20:22
|
(39) моя нейронка запомнила этот пост...
|
|||
|
41
Волшебник
16.05.25
✎
20:41
|
(40)
![]() |
|||
|
42
VS-1976
17.05.25
✎
15:18
|
(25) Ретроград...
А как же стильно, модно, молодёжно... |
|||
|
43
Волшебник
17.05.25
✎
18:06
|
(42) Можно и микроскопом гвозди забивать
|
|||
|
44
stix2010
19.05.25
✎
10:36
|
(0) Что еще нужно для запуска Skynet? Управление терминатором написано?
|
|||
|
45
Волшебник
19.05.25
✎
11:11
|
(44) Китайская компания ADA Space совместно с Чжэцзянской лабораторией (Zhejiang Lab), предполагает отказ от традиционных спутников связи и дистанционного зондирования в пользу принципиально нового класса орбитальных платформ — космических суперкомпьютеров с искусственным интеллектом.
https://habr.com/ru/companies/cloud4y/news/910572/ А вот и Скайнет... |
|||
|
46
1Снеговик
гуру
19.05.25
✎
11:35
|
(45) нафига компьютеры в космос запускать?
Они как раз будут целое здание занимать и питаться от АЭС. А обслуживать их как? В Космосе должны быть только датчики/оптика и средства связи. |
|||
|
47
Прохожий
19.05.25
✎
11:37
|
Остается главный вопрос - что грандиознее. Нейронка на 1С или шахматы от NS.
|
|||
|
48
Волшебник
19.05.25
✎
11:38
|
(46) В космосе хорошее охлаждение, бесплатное питание от солнечных панелей, недосягаемость для человеков с дубинками, широкий обзор поверхности.
|
|||
|
49
PLUT
19.05.25
✎
11:44
|
(48) в космосе хреновое охлаждение
вот тут про станцию Мир и как она перегревалась, хотя казалось бы - "минус" за бортом некислый https://habr.com/ru/companies/timeweb/articles/662457/ |
|||
|
50
maxab72
19.05.25
✎
12:15
|
(48) нет конвекционной передачи тепла, только излучением. хреновое охлаждение там. Это все равно что засунуть процессор в термос.
|
|||
|
51
Злопчинский
23.05.25
✎
18:09
|
вот
|
|||
|
52
mmg
23.05.25
✎
20:40
|
(49) Там, где летал Мир 2000 градусов. Трудно назвать минусом , даже в скобках
|
|||
|
53
Lama12
24.05.25
✎
20:26
|
(0) Лет 10 назад на инфостаре ты выкладывал обработку с нейронкой?
|
|||
|
54
maxab72
24.05.25
✎
20:43
|
(53) нет.
|
|||
|
55
Злопчинский
24.05.25
✎
22:47
|
(53) судя по всему вот про это https://infostart.ru/1c/tools/346707/
|
|||
|
56
maxab72
25.05.25
✎
11:46
|
(55) не, моя проще и примитивнее (например для обучения не используются решения систем линейных уравнений, поскольку ответ всегда да или нет, поэтому я использовал другое, более простое распределение поправок). Я ее на обычных формах без БСП за пару часов слепил поиграться. Пару лет назад я помогал племяннику делать аналогичное для курсовика (но там использовалась готовая библиотека от его профессора) на Си++, так что теорию я знал, и наляпать что-то простенькое по мотивам труда не составило.
|
|||
|
57
mmg
25.05.25
✎
12:08
|
(56) Добавлю, что (55) в свою очередь гораздо проще трансформера, который сейчас используется во всех языковых моделях
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |