Имя: Пароль:
LIFE
Юмор
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) нет конвекционной передачи тепла, только излучением. хреновое охлаждение там. Это все равно что засунуть процессор в термос.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс