Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/39: Рейтинг темы: голосов - 39, средняя оценка - 4.72
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22

Алгоритм искусственного интеллекта (ИИ)

19.05.2014, 02:12. Показов 8969. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чтобы понять что-то серьезное, требуется начать с малого. Поэтому есть цель начать создавать ИИ с моделирования поведения простейших и двигаться дальше.

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

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

Итак, если есть желание немного поломать мозги над созданием искусственных мозгов, милости прошу в эту ветку.

Формат взаимодействия я предлагаю следующий:
1. Мной выкладывается алгоритм
2. Мы его обсуждаем
3. Один или несколько человек берутся реализовывать его
4. Полученный код выкладывается на форуме
5. Этап тестирования
6. Исправление ошибок

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

Начнем с более простых задач, а затем перейдем к более сложным.

Итак, 1-я задача:
База и движение
Поле для движения ИИ 20*20 клеток
Вид сверху
Клетки белого цвета нейтральны
Клетки кодируются так же, как и в "морском бое". Буквы по горизонтали и цифры по вертикали
ИИ (отдельная подпрограмма) занимает 1 клетку
Цвет черный
ИИ может ходить на 1 клетку за раз в любую из 8 сторон (пока рандомно)

Задача 2-я
Зрение и ориентировка в пространстве
ИИ сканирует всё поле и узнает, где какого цвета клетки (пока только цвет)
После сканирования поля, ИИ получает ту же карту, что и видим мы на экране при взгляде сверху. Обозначая поля клеток А1, А2, А3.. и, соответственно свое местоположение
Черный цвет приравнен к "Я" изначально
После каждого шага, ИИ делает новое сканирование поля

Поясню: это не ИИ, а пока лишь плацдарм для ИИ. Собственно, интеллект начнется со следующей задачи, но необходимо же от чего то отталкиваться.

Вопросы к обсуждению:
Реалистично ли выполнить подобную программу?
На мой взгляд, самое сложное - это реализовать сканирование поля и создание внутренней карты у ИИ. Но, я могу ошибаться. Если необходимо разобрать это подробнее, можем разобрать.
Есть ли у кого-либо готовность выполнить эти участки кода? Или уже выложить результаты реализации?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2014, 02:12
Ответы с готовыми решениями:

Модели и методы искусственного интеллекта
Народ, ОЧЕНЬ нужна книга "модели и методы искусственного интеллекта" (Матвеев, Свиридов, Алейникова).Точнее, мне оттуда нужен алгоритм...

Слишком медленный алгоритм искусственного интеллекта игры Балда
Здравствуйте! Столкнулся с одной сложностью при создании искусственного интеллекта (ИИ) для своей игры Балда. Сначала опишу алгоритм...

Интегральная теория искусственного интеллекта
Ликбез. Когда вообще нужны новые теории? Очевидно, когда не работают старые. Как обстоит с этим делом в ИИ-строении? Давайте...

56
13.06.2014, 00:19
Студворк — интернет-сервис помощи студентам

Не по теме:


кафедра СМехатроники :D

0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
05.07.2014, 14:36
задача 1.
Алгоритм программы:
1) для поля 20*20 был создан массив размером 22*22
2) периметр этого массива был заполнен числом 1
3) центральная часть массива состоит из нулей
4) 0 - означает, что место свободно (1 - занято)
5) рандомно помещён объект в виде буквы "О"
6) рандомно задается шаг ±1 как по оси абсцисс, так
и по оси ординат
7) в цикле DO проверяется рандомная рядом стоящая
клетка на предмет нет ли в ней чего (0 - свободно)
8) если свободно, то объект перемещается, а нет - вновь
рандомно вычисляется очередной шаг.
9) для выхода из программы нажмите любую клавишу
Примечание:
Программа такова, что объект будет свободно обходить
любые препятствия. (например пройти лабиринт)
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DEFINT A, D, I-K, X-Y
DIM a(1 TO 22, 1 TO 22)
RANDOMIZE TIMER
CLS
 
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1
      a(22, j) = 1
      a(i, 1) = 1
      a(i, 22) = 1
      LOCATE 1, j
      PRINT "*"
      LOCATE 22, j
      PRINT "*"
      LOCATE i, 1
      PRINT "*"
      LOCATE i, 22
      PRINT "*"
   NEXT j
NEXT i
 
x = 20 * RND + .5
y = 20 * RND + .5
a(x, y) = 1
LOCATE x, y
PRINT "O"
 
DO
   dx = 3 * RND - 1.5
   dy = 3 * RND - 1.5
   FOR l& = 1 TO 2000000: NEXT
   IF a(x + dx, y + dy) = 0 THEN
      a(x, y) = 0
      LOCATE x, y
      PRINT " "
      x = x + dx
      y = y + dy
      a(x, y) = 1
      LOCATE x, y
      PRINT "O"
   END IF
LOOP WHILE INKEY$ = ""
END
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
07.07.2014, 20:49
По сути, та же программа, но добавлена стена с проходом
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
DEFINT A, D, I-K, X-Y
DIM a(1 TO 22, 1 TO 22)
RANDOMIZE TIMER
CLS
 
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1
      a(22, j) = 1
      a(i, 1) = 1
      a(i, 22) = 1
      LOCATE 1, j
      PRINT "*"
      LOCATE 22, j
      PRINT "*"
      LOCATE i, 1
      PRINT "*"
      LOCATE i, 22
      PRINT "*"
   NEXT j
NEXT i
 
x = 20 * RND + .5
y = 20 * RND + .5
a(x, y) = 1
LOCATE x, y
PRINT "O"
 
FOR i = 2 TO 21
   IF i > 9 AND i < 13 THEN 200
   LOCATE 11, i
   PRINT "*"
   a(11, i) = 1
200
NEXT i
 
DO
   dx = 3 * RND - 1.5
   dy = 3 * RND - 1.5
   FOR l& = 1 TO 2000000: NEXT
   IF a(x + dx, y + dy) = 0 THEN
      a(x, y) = 0
      LOCATE x, y
      PRINT " "
      x = x + dx
      y = y + dy
      a(x, y) = 1
      LOCATE x, y
      PRINT "O"
   END IF
LOOP WHILE INKEY$ = ""
END
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
09.07.2014, 07:30
предлагаю вам ещё один вариант предыдущей программы.
Их много (40) и поведение сложнее, так создаются программы с ИИ
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
DEFINT A, D, I-L, X-Y
DIM a(1 TO 22, 1 TO 22)
RANDOMIZE TIMER
CLS
 
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1
      a(22, j) = 1
      a(i, 1) = 1
      a(i, 22) = 1
      LOCATE 1, j
      PRINT "*"
      LOCATE 22, j
      PRINT "*"
      LOCATE i, 1
      PRINT "*"
      LOCATE i, 22
      PRINT "*"
   NEXT j
NEXT i
 
l = 0
DO
   x = 10 * RND + .5
   y = 20 * RND + .5
      IF a(x, y) = 0 THEN
      a(x, y) = 2
      LOCATE x, y
      PRINT "O"
      l = l + 1
   END IF
LOOP UNTIL l > 40
 
FOR i = 2 TO 21
   IF i > 9 AND i < 13 THEN 200
   LOCATE 11, i
   PRINT "*"
   a(11, i) = 1
200
NEXT i
 
DO
   DO
      x = 20 * RND + 1.5
      y = 20 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   dx = 3 * RND - 1.5
   dy = 3 * RND - 1.5
   FOR l& = 1 TO 100000: NEXT
   IF a(x + dx, y + dy) = 0 THEN
      a(x, y) = 0
      LOCATE x, y
      PRINT " "
      x = x + dx
      y = y + dy
      a(x, y) = 2
      LOCATE x, y
      PRINT "O"
   END IF
LOOP WHILE INKEY$ = ""
END
0
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
16.07.2014, 00:24  [ТС]
xod, спасибо Вам огромное за ответ и ряд представленных алгоритмов! Но есть небольшая проблема с компиляцией QBasic. Есть ли подходящие программы под Windows 7, 64-разрядный? Поскольку очень хочется взглянуть на результат представленного Вами кода.
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
16.07.2014, 09:05
Насколько мне известно, Windows 7 (32) поддерживает
Dos-программы (эмуляция Dos). Полагаю (уверен), что
и в вашей ОС все должно работать. Если нет?? Но что ж
в конце-концов алгоритм есть и подобную программу
можно написать на ином языке (например VB). В общем
дело в нас, в нашем желании двигаться к намеченной
цели, и успех придёт. Надо будет сменяем и язык.
P.S.
В этих программах я понял главное:
1) для управления объектами надо создать матрицу
на два размера больше, чем поле деятельности объектов
2) объекты можно различать, если в матрице обозначать
их разными числами
3) объекты могут обходить препятствия
4) объекты могут взаимодействовать друг с другом
(например можно устроить сражение двух армий,
сражённый объект будет исчезать с поля боя) и т.д.
Удачи вам!

Добавлено через 1 час 15 минут
Предлагаю еще одну программу. Она напоминает
пьяную драку 20 против 20. Противники различаются видом:
"O" против "Y" если одна сторона победит другую, то программа
сама остановится. Выход из программы - нажать любую клавишу.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
DEFINT A, D, I-L, X-Y
DIM a(1 TO 22, 1 TO 22)
 
DEF fnd
   n2 = 0
   n3 = 0
   fnd = 1
   FOR i = 2 TO 21
      FOR j = 2 TO 21
         IF a(i, j) = 2 THEN n2 = n2 + 1
         IF a(i, j) = 3 THEN n3 = n3 + 1
      NEXT j
   NEXT i
   IF n2 * n3 = 0 THEN fnd = 0
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1
      a(22, j) = 1
      a(i, 1) = 1
      a(i, 22) = 1
      LOCATE 1, j
      PRINT "*"
      LOCATE 22, j
      PRINT "*"
      LOCATE i, 1
      PRINT "*"
      LOCATE i, 22
      PRINT "*"
   NEXT j
NEXT i
 
l = 0
DO
   x = 10 * RND + 5
   y = 20 * RND + .5
      IF a(x, y) = 0 THEN
      a(x, y) = 2
      LOCATE x, y
      PRINT "O"
      l = l + 1
   END IF
LOOP UNTIL l > 20
 
l = 0
DO
   x = 10 * RND + 5
   y = 20 * RND + .5
      IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "Y"
      l = l + 1
   END IF
LOOP UNTIL l > 20
 
 
DO
   IF fnd = 0 THEN 2014
  
   DO
      x = 20 * RND + 1.5
      y = 20 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   dx = 3 * RND - 1.5
   dy = 3 * RND - 1.5
   FOR l& = 1 TO 100000: NEXT
   IF a(x + dx, y + dy) = 0 OR a(x + dx, y + dy) = 3 THEN
      a(x, y) = 0
      LOCATE x, y
      PRINT " "
      x = x + dx
      y = y + dy
      a(x, y) = 2
      LOCATE x, y
      PRINT "O"
   END IF
 
   IF fnd = 0 THEN 2014
  
   DO
      x = 20 * RND + 1.5
      y = 20 * RND + 1.5
   LOOP UNTIL a(x, y) = 3
 
   dx = 3 * RND - 1.5
   dy = 3 * RND - 1.5
   FOR l& = 1 TO 100000: NEXT
   IF a(x + dx, y + dy) = 0 OR a(x + dx, y + dy) = 2 THEN
      a(x, y) = 0
      LOCATE x, y
      PRINT " "
      x = x + dx
      y = y + dy
      a(x, y) = 3
      LOCATE x, y
      PRINT "Y"
   END IF
LOOP WHILE INKEY$ = ""
2014
END
0
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
17.07.2014, 00:08  [ТС]
Только вот 64-разрядный, к сожалению, не поддерживает эмуляцию Dos.. Пробовал несколько компиляторов, все не сработали. Но посмотрю ещё.
По сути, да, язык не столь важен, как сам алгоритм.

Далее важно добавить некое стремление. Без стремления - наша заготовка под ИИ будет ждать команд, что не очень-то похоже на жизнь.
Так вот у каждого живого существа есть цель. Цель задается некой потребностью. Достижение цели и есть стремление.

В простейшем варианте мы можем взять концепцию "насыщения".
1. Есть шкала сытости (переменная сытость = потребность) от 0 до 100.
2. ИИ каждый раз отслеживает значение переменной "сытость" после сканирования поля (сканирование поля делается после каждого шага).
3. Стремиться к увеличению этой шкалы (по сути, цель). Т.е. действие связанное с увеличением этой шкалы будет приоритетным. На этом пункте самый главный вопрос: как это реализовать в программе?
0
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
17.07.2014, 15:51
написал ещё одну программу, ещё один шаг в ИИ.
Итак, 10 овец (О) пасутся на поле, где в 50-ти местах
растёт трава. (+) В этой программе я добавил ещё одну
матрицу: она характеризует "сытность" овцы в %%.
Изначально все овцы сыты на 50%. Теперь овцы
обладают свойством (зрением) видеть что у них под
ногами. То есть программа проверяет все 8 квадратиков
куда может идти овца. И если хоть в одном квадратике
есть трава (в матрице она имеет номер 3), то овца
съест эту траву и ей прибавится 10% сытности.
Проверка программы показала (в среднем), что из 10-ти
овец одна так ничего и не ела, а другая (крайность) съела
(сыта) на 200%. Что делать? (Вопросы)
1) если одна овца наелась на 100%, она не должна
больше есть?? (поесть все любят)
2) как овцы должны тратить энергию? Задать какой-
либо период времени? (Число характеризующее сутки?)
3) трава должна все время расти?? Разом?? Или
одну травку съели - выросла другая?
4) увеличить у овец дальность зрения?
5) зрение круговое или некий сегмент?
Тут есть над чем подумать, ведь наличие зрения
заставляет овцу действовать более логично, а не
шататься из стороны в сторону.
А вот сама программа:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
DEFINT A-D, I-L, X-Z
DIM a(1 TO 22, 1 TO 22)
DIM b(2 TO 21, 2 TO 21)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1: a(22, j) = 1
      a(i, 1) = 1: a(i, 22) = 1
      LOCATE 1, j: PRINT "*"
      LOCATE 22, j: PRINT "*"
      LOCATE i, 1: PRINT "*"
      LOCATE i, 22: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 17 * RND + 3
   y = 17 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 17 * RND + 3
   y = 17 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 20 * RND + 1.5
      y = 20 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   SELECT CASE fnz(x, y)
      CASE 1
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
 
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
  
         IF a(x + dx, y + dy) = 0 THEN
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            x = x + dx
            y = y + dy
            a(x, y) = 2
            b(x, y) = b(x - dx, y - dy)
            b(x - dx, y - dy) = 0
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
   FOR l& = 1 TO 1000000: NEXT
LOOP WHILE INKEY$ = ""
 
CLS
FOR i = 2 TO 21
   FOR j = 2 TO 21
      IF a(i, j) = 2 THENн PRINT b(i, j);
   NEXT j
NEXT i
END
1
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
18.07.2014, 19:37  [ТС]
Цитата Сообщение от xod Посмотреть сообщение
1) если одна овца наелась на 100%, она не должна
больше есть?? (поесть все любят)
2) как овцы должны тратить энергию? Задать какой-
либо период времени? (Число характеризующее сутки?)
3) трава должна все время расти?? Разом?? Или
одну травку съели - выросла другая?
4) увеличить у овец дальность зрения?
5) зрение круговое или некий сегмент?
Тут есть над чем подумать, ведь наличие зрения
заставляет овцу действовать более логично, а не
шататься из стороны в сторону.
Интересная программа! Некое продолжение идеи. Видел подобную программу, только там были еще добавлены волки, которые могли есть овец.

По поводу вопросов:
1. Думаю, нужная переменная сытости, которая не может превышать 100%. После насыщения на 100%, может идти, например, размножение.
2. Да, энергию могут тратить, ориентируясь на машинное время в несколько секунд или на размножение.
3. Трава, наверное, также может размножаться на соседней клетке, если съедена, то уже не размножается.
4, 5. Смотря какие цели преследуются: если некая имитация простых живых организмов, то можно оставить так. Но если планировать дальше, вводить простые логические операции мышления, то можно и увеличить на всю площадь.

И все-таки мучает вопрос: на чем Вы компилируете QBasic?
Или не могли бы добавить комментарии к кускам кода, чтобы легче перенести его на другой язык?
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
18.07.2014, 20:03
Вообще говоря мне нет необходимости компилировать код.
QBasic сразу запускает код на исполнение, без всякой компиляции
Но если бы была такая необходимость, то у меня есть ещё две
программы QuickBasic 4.5 и QuickBasic 7.1. Они прекрасно справятся
с любой программой QBasic. Что касается комментариев, то да,
я могу подробно прокомментировать любую из написанных мною
программ прямо по их коду. Завтра же и прокомментирую последнюю
из написанных программ. (можно и волков в программу вставить
Но надо подумать)
Удачи вам!
0
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
18.07.2014, 23:33  [ТС]
Цитата Сообщение от xod Посмотреть сообщение
Вообще говоря мне нет необходимости компилировать код.
QBasic сразу запускает код на исполнение, без всякой компиляции
Но если бы была такая необходимость, то у меня есть ещё две
программы QuickBasic 4.5 и QuickBasic 7.1. Они прекрасно справятся
с любой программой QBasic. Что касается комментариев, то да,
я могу подробно прокомментировать любую из написанных мною
программ прямо по их коду. Завтра же и прокомментирую последнюю
из написанных программ. (можно и волков в программу вставить
Но надо подумать)
Удачи вам!
Помучился с эмуляторами Dos, но в итоге нашел qb64, который прекрасно справляется с кодом. Но ругается на "DEF fnd" и "DEF fnz (i, j)", сообщая, что "Command not implemented on line 5", судя по теме: Решение дифференциальных уравнений Метод Эйлера надо будет поискать другой компилятор или другой вариант этой команды ))
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
19.07.2014, 08:21
Да, я слышал о QB64
Он не поддерживает определение функций с помощью оператора DEF
Но ту же функцию можно записать иначе:

FUNCTION "имя функции" (ее параметры)
здесь тело функции
END FUNCTION

Вот и все, и компилятор ругаться не будет
Привожу вам последнюю программу с комментариями
Если что не очень понятно, пишите - подробно объясню.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
' поскольку основное поле имеет размер 20*20, то
' основной матрицей, описывающей местоположение объектов
' и их характеристики является матрица А(), ее размеры 22*22
' Обозначение Объектов в матрице А()
' 0 - свободное ничем не занятое поле
' 1 - стена или иной неподвижный объект
' 2 - живой объект (в данном случае овца)
' 3 - трава
' Аналогично можно ввести и иные объекты (например волков)
 
DEFINT A-D, I-L, X-Z                   ' декларация переменных, в данном случае
                                                           ' переменные целого типа
DIM a(1 TO 22, 1 TO 22)              ' задается матрица А(), ее индексы для
                                                           ' удобства изменяются от 1 до 22
DIM b(2 TO 21, 2 TO 21)              ' задается матрица В() для характеристики
                                                            ' свойств объектов (степень сытости овцы)
 
                                                            ' объявление функции, создана специально 
                                                            ' для того, чтобы овца могла находить траву
                                                            ' у своих ног. Начальное значение функции 0
                                                            ' что означает - рядом травы нет. Цифры 1, 2, ... 8
                                                            ' указывают на то, что трава есть и где точно
                                                            ' пример: (первая строка функции )
                                                            ' IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
                                                            ' здесь a(i - 1, j - 1) - означает a()- матрица
                                                            ' i - 1 - шаг вверх (ведь i - номер строки)
                                                            ' j - 1 - шаг влево (ведь j - номер столбца)
                                                            ' 3 - это номер травы
                                                            ' GOTO 100 - (оператор перехода) - раз трава найдена, то выход
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
'RANDOMIZE TIMER                             ' включение генератора случайных чисел
CLS                                                               ' очистка экрана
                                                                       ' 
                                                                       ' сооружение забора из знаков "*"
                                                                       ' (здесь три обязательные вещи)
                                                                       ' 1. в матрицу А() ставится число 1
                                                                       ' 2. курсор устанавливается на нужную позицию
                                                                       ' (это делает оператор LOCATE i , j)
                                                                       ' 3. печатается нужный символ (оператор  PRINT "*")
FOR i = 1 TO 22
   FOR j = 1 TO 22
      a(1, j) = 1: a(22, j) = 1
      a(i, 1) = 1: a(i, 22) = 1
      LOCATE 1, j: PRINT "*"
      LOCATE 22, j: PRINT "*"
      LOCATE i, 1: PRINT "*"
      LOCATE i, 22: PRINT "*"
   NEXT j
NEXT i
                                                                ' здесь в рандомном порядке размещаются овцы
                                                                ' и подсчитывается их число (переменная l1)
                                                                ' обратить внимание, что овца помещается
                                                                ' только на пустое место (А() = 0), ее номер 2
l1 = 0
DO
   x = 17 * RND + 3
   y = 17 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
                                                                ' здесь в рандомном порядке размещается трава
                                                                ' аналогично овцам                                   
l2 = 0
DO
   x = 17 * RND + 3
   y = 17 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + +  Отсюда начинается динамика + + + + +
 
DO                    ' ОБЩИЙ ЦИКЛ    (НАЧАЛО)
   DO                                                       ' этот цикл рандомно ищет местоположение овцы
      x = 20 * RND + 1.5
      y = 20 * RND + 1.5
   LOOP UNTIL a(x, y) = 2                 ' конец цикла
 
   SELECT CASE fnz(x, y)                  ' оператор выбора (он есть в любом языке программирования)
      CASE 1                                             ' овца осматривается по всем восьми сторонам 
         LOCATE x, y                                ' (цифры при операторе CASE 1, 2, 3, .... 8)
         PRINT " "                                     ' в данном случае овца находится в точке с координатами x, y
         a(x, y) = 0                                       ' а трава слева вверху (координаты x-1 и y-1)
         c = b(x, y) + 10                              ' овца уходит со своего места в сторону травы и съедает ее
         b(x, y) = 0                                       ' матрица А() меняется a(x, y) = 0 - означает, что овца ушла 
         x = x - 1                                           ' (PRINT " " - ее изображение стерто, это пробел, он не виден)
         y = y - 1                                           '  x = x - 1   y = y - 1  - изменение координат овцы
         LOCATE x, y                                 ' LOCATE x, y - ее новая позиция  
         PRINT "O"                                    ' PRINT "O"  - ее новое изображение
         a(x, y) = 2                                        ' a(x, y) = 2  - ее новая запись в матрице А()
         b(x, y) = c                                        '  c = b(x, y) + 10 - овца поела (с - ее сытость),
      CASE 2                                               ' которая записывается в матрице В().   b(x, y) = c    
         LOCATE x, y                                               ' далее код повторяется
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
                                                         ' особый случай - травы нет
                                                         ' рандомно вычисляется щаг (овце все-равно куда идти)
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
  
         IF a(x + dx, y + dy) = 0 THEN            ' определяется свободно ли место и если свободно,
            a(x, y) = 0                                             ' то овца туда идет
            LOCATE x, y                                       ' все аналогично тому, как овца ест траву
            PRINT " "
            x = x + dx
            y = y + dy
            a(x, y) = 2
            b(x, y) = b(x - dx, y - dy)
            b(x - dx, y - dy) = 0
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT                                  ' (LOOP WHILE INKEY$ = "" - КОНЕЦ ОБЩЕГО ЦИКЛА)
   FOR l& = 1 TO 1000000: NEXT          ' цикл задержки (подбирается индивидуально)
LOOP WHILE INKEY$ = ""                  ' выход из программы - нажмите любую клавишу
 
CLS                                                               ' это контрольный кусочек кода 
FOR i = 2 TO 21                                          ' его можно выкинуть, но он временно необходим 
   FOR j = 2 TO 21                                       ' для дальнейшего развития и усложнения программы
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END                                                              ' конец всей программы
1
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
20.07.2014, 21:06  [ТС]
Буду искать что-то еще для запуска кода, поскольку qb64 выдал новый перл после исправления DEF на FUNCTION, теперь по поводу строки: 18 (RANDOMIZE TIMER) "statement cannot be placed between sub/functions on current line".
А комментарии к коду великолепны - всё прозрачно и ясно!
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
21.07.2014, 14:19
вот ещё на один шаг мы стали ближе к ИИ !!
Да! Мы! Без вас бы я так далеко не пошёл бы.
В этой программе увеличена дальность зрения овцы,
теперь она составляет 2 шага. Пришлось матрицу А()
тоже увеличить на 2 размера. Это естественно. Если этого
не делать, то горизонт будет ограничен и придётся вводить
много лишнего кода, чтобы учитывать эти ограничения.
Работая над программой я понял, что можно ввести зрение
близкое к тому, которое существует в природе. В самом деле
мы сейчас используем тотальный перебор, Но в природе его нет.
Например человек хорошо видит то, что близко и лишь фрагменты
и контуры того, что далеко, но ведь то же самое можно задать в
программе!! Надо просто проверять не все клетки а выборочно,
причём чем больше расстояние, тем реже проверки. Тут надо ещё
конечно подумать (я подумаю). А пока мне удалось очень органично
вписать в программу новое зрение. Благодаря вам из меня может
получиться специалист по ИИ. Следую далее намеченному курсу:
Сначала ограничу аппетит овец, а потом заставлю их размножаться.
Все результаты (пусть предварительные) буду выводить на форум
Удачи вам!
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
DEFINT A-E, I-L, X-Z
DIM a(1 TO 24, 1 TO 24)
DIM b(3 TO 22, 3 TO 22)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
DEF fnz2 (i, j)
   fnz2 = 0
   e = a(i - 2, j - 2) = 3 OR a(i - 2, j - 1) = 3 OR a(i - 1, j - 2) = 3
   IF e THEN fnz2 = 1: GOTO 200
   e = a(i - 2, j + 2) = 3 OR a(i - 2, j + 1) = 3 OR a(i - 1, j + 2) = 3
   IF e THEN fnz2 = 2: GOTO 200
   IF a(i - 1, j) = 3 THEN fnz2 = 3:  GOTO 200
   e = a(i + 2, j - 2) = 3 OR a(i + 2, j - 1) = 3 OR a(i + 1, j - 2) = 3
   IF e THEN fnz2 = 4: GOTO 200
   e = a(i + 2, j + 2) = 3 OR a(i + 2, j + 1) = 3 OR a(i + 1, j + 2) = 3
   IF e THEN fnz2 = 5: GOTO 200
   IF a(i + 1, j) = 3 THEN fnz2 = 6: GOTO 200
   IF a(i, j - 1) = 3 THEN fnz2 = 7: GOTO 200
   IF a(i, j + 1) = 3 THEN fnz2 = 8: GOTO 200
200
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 2 TO 23
   FOR j = 2 TO 23
      a(2, j) = 1: a(23, j) = 1
      a(i, 2) = 1: a(i, 23) = 1
      LOCATE 2, j: PRINT "*"
      LOCATE 23, j: PRINT "*"
      LOCATE i, 2: PRINT "*"
      LOCATE i, 23: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 21 * RND + 1.5
      y = 21 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   IF fnz2(x, y) > 0 THEN e = fnz2(x, y)
   e = fnz(x, y)
  
   SELECT CASE e
      CASE 1
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
 
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
  
         IF a(x + dx, y + dy) = 0 THEN
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            c = b(x, y)
            b(x, y) = 0
            x = x + dx
            y = y + dy
            a(x, y) = 2
            b(x, y) = c
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
   FOR l& = 1 TO 1000000: NEXT
LOOP WHILE INKEY$ = ""
 
CLS
FOR i = 2 TO 21
   FOR j = 2 TO 21
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END
Добавлено через 3 часа 26 минут
в коде обнаружена опечатка, все исправлено.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
DEFINT A-E, I-L, X-Z
DIM a(1 TO 24, 1 TO 24)
DIM b(3 TO 22, 3 TO 22)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
DEF fnz2 (i, j)
   fnz2 = 0
   e = a(i - 2, j - 2) = 3 OR a(i - 2, j - 1) = 3 OR a(i - 1, j - 2) = 3
   IF e THEN fnz2 = 1: GOTO 200
   e = a(i - 2, j + 2) = 3 OR a(i - 2, j + 1) = 3 OR a(i - 1, j + 2) = 3
   IF e THEN fnz2 = 2: GOTO 200
   IF a(i - 1, j) = 3 THEN fnz2 = 3:  GOTO 200
   e = a(i + 2, j - 2) = 3 OR a(i + 2, j - 1) = 3 OR a(i + 1, j - 2) = 3
   IF e THEN fnz2 = 4: GOTO 200
   e = a(i + 2, j + 2) = 3 OR a(i + 2, j + 1) = 3 OR a(i + 1, j + 2) = 3
   IF e THEN fnz2 = 5: GOTO 200
   IF a(i + 1, j) = 3 THEN fnz2 = 6: GOTO 200
   IF a(i, j - 1) = 3 THEN fnz2 = 7: GOTO 200
   IF a(i, j + 1) = 3 THEN fnz2 = 8: GOTO 200
200
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 2 TO 23
   FOR j = 2 TO 23
      a(2, j) = 1: a(23, j) = 1
      a(i, 2) = 1: a(i, 23) = 1
      LOCATE 2, j: PRINT "*"
      LOCATE 23, j: PRINT "*"
      LOCATE i, 2: PRINT "*"
      LOCATE i, 23: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 21 * RND + 1.5
      y = 21 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   e = fnz2(x, y)
   IF fnz(x, y) > 0 THEN e = fnz(x, y)
  
   SELECT CASE e
      CASE 1
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
 
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
  
         IF a(x + dx, y + dy) = 0 THEN
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            c = b(x, y)
            b(x, y) = 0
            x = x + dx
            y = y + dy
            a(x, y) = 2
            b(x, y) = c
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
   FOR l& = 1 TO 1000000: NEXT
LOOP WHILE INKEY$ = ""
 
CLS
FOR i = 2 TO 21
   FOR j = 2 TO 21
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END
0
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
22.07.2014, 00:54  [ТС]
Спасибо, xod, очень приятно!

Теперь могу в полной мере использовать QBasic, так что посмотрел действие всех программ и заметил, что "овцы" "играют в пошаговую стратегию", т.е. по какой-то причине ходят по очереди, а не одновременно. Или это для удобства наблюдения?

"можно ввести зрение"
Интересная идея! Я думаю, что зрение можно вводить несколько позже, когда будет заложена "мотивационная" часть. Тем более, что разработки в сфере распознавания образов вполне можно добавить при наличии "разумной" части.
По поводу зрения, общие моменты. Природа нас наделила способностью различать: цвет, форму и размеры. Так вот для выживания (если учесть, что есть еще и ночное время суток), наиболее важна следующая последовательность восприятия:
1. Размер
2. Форма
3. Цвет
Чем больше объект, тем более он потенциально опасен. После этой первичной проверки, по форме можно отличить "свой-чужой". А если не помогла форма объекта, то днём еще и цвет видно.



Начиная с этого куска кода, насколько понимаю идёт действие "овцы", но сейчас у неё жестко привязаны действия к траве. Т.е. "овца", как некий "флюгер" на ветру: увидел-идёт.

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
CASE 1                                             ' овца осматривается по всем восьми сторонам 
         LOCATE x, y                                ' (цифры при операторе CASE 1, 2, 3, .... 8)
         PRINT " "                                     ' в данном случае овца находится в точке с координатами x, y
         a(x, y) = 0                                       ' а трава слева вверху (координаты x-1 и y-1)
         c = b(x, y) + 10                              ' овца уходит со своего места в сторону травы и съедает ее
         b(x, y) = 0                                       ' матрица А() меняется a(x, y) = 0 - означает, что овца ушла 
         x = x - 1                                           ' (PRINT " " - ее изображение стерто, это пробел, он не виден)
         y = y - 1                                           '  x = x - 1   y = y - 1  - изменение координат овцы
         LOCATE x, y                                 ' LOCATE x, y - ее новая позиция  
         PRINT "O"                                    ' PRINT "O"  - ее новое изображение
         a(x, y) = 2                                        ' a(x, y) = 2  - ее новая запись в матрице А()
         b(x, y) = c
Для "овцы" - это нормально, но, в конечном итоге, нам важно создать самостоятельно соображающее существо и поэтому очень важно дать ему возможность именно "сканировать" пространство вокруг себя, т.е. записывать содержимое окружения и, исходя из потребностей, выбирать действие.
Примерный план таков:
1. Сканировать клетку выше надо мной и записать в (файл, матрицу, массив...), сканировать клетку правее и выше надо мной, снова записать и т.д. всё окружение.
2. Проверить уровень "сытости", если ниже определенного уровня, то пойти и съесть.

Тогда не будет жесткой привязки к окружению, а действительно осознанный выбор действия.

И Вам успехов, xod! С удовольствием и нетерпением жду следующих результатов!
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
22.07.2014, 15:30
Хочу ответить на ряд вопросов, которые вы поставили или
поставите. Очередность ходьбы?? Как таковой очередности нет.
Кому ходить? - выбирается случайно. Но я вас понял насчёт
одновременности. Это продиктовано тем, чтобы сделать код
проще. Ибо если я заставлю их ходить "стадом", то могут
происходить столкновения - две овцы идут в одну клетку. Иными
Словами из двух овец получится одна. Однако вы подкинули
хорошую идею - одна овца идёт на два поля - вот вам и размножение.
Теперь насчёт цвета. Если ввести ещё одну матрицу, то мы можем
каждую клетку или объект характеризовать таким свойством как
цвет (32768 цветов)!! Вы понимаете, вы не будете видеть цвет, Но
Они его видеть будут, будут различать его ( и сообщать если это
надо какого цвета тот или иной объект). Ночь не помеха, если мы
только не создадим искусственную ночь. Но тут надо подумать, а
что это даст, ведь цвет сведет на нет само понятие день и ночь!!
Теперь насчёт интеллекта овец и их разумного поведения.
Овцы на данном этапе - это стадо. Их цель поесть, поэтому
придать им большую разумность при такой цели вряд ли возможно.
Разумное поведение - это поведение подчиненное определённой
Цели. Именно цель должна двигать овцами. Что может быть целью??
Ну например ходит парами (зачем? Я не знаю, я только предлагаю)
Другая цель, например двигаться по кругу (квадрату), быть около него
Подводя итоги, я предлагаю попробовать все понемногу, посмотреть,
что получится. А там видно будет.
Удачи вам!
0
10 / 10 / 0
Регистрация: 19.05.2014
Сообщений: 22
23.07.2014, 00:45  [ТС]
Большое спасибо за ответы!

"Вы понимаете, вы не будете видеть цвет, Но
Они его видеть будут, будут различать его ( и сообщать если это
надо какого цвета тот или иной объект)"

Не совсем понял, почему мы не сможем видеть цвета? Начал копаться в QBasic и насколько понял в режиме SCREEN 13 мы сможем увидеть минимум 256 цветов.

"если мы
только не создадим искусственную ночь. Но тут надо подумать, а
что это даст"

Полагаю, что ночь может только добавить реалистичности, но при этом усложнит нам решение основной задачи - создание ИИ.

"Овцы на данном этапе - это стадо. Их цель поесть, поэтому
придать им большую разумность при такой цели вряд ли возможно.
Разумное поведение - это поведение подчиненное определённой
Цели. Именно цель должна двигать овцами. Что может быть целью??"

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

И второй важный пункт:
Это создать эффект раздражимости, цитаты из биологии: "Любая биологическая система, будь то клетка, организм или сообщество организмов, способна избирательно реагировать на различные воздействия, оказываемые на нее снаружи или изнутри. Это свойство организмов получило название — раздражимость. Ответные реакции живого на различные воздействия служат показателями его чувствительности и обеспечивают возможность его приспособления и выживания в постоянно изменяющихся условиях окружающей среды".
"живой организм имеет органы раздражения и реагирует на внешнюю среду. Живой организм способен менять внешнюю среду или обмениваться с ней информацией: атаковать, убегать, прикинуться мертвым, кричать, поднимать шерсть дыбом, выделять смолу и т.п. У высших живых организмов довольно сложные способы обмена информацией".

И именно эти 2 шага ведут к созданию раздражимости или "стимула-реакции" при наличии даже лишь одной цели поесть:
1. Сканировать клетку выше надо мной и записать в (файл, матрицу, массив...), сканировать клетку правее и выше надо мной, снова записать и т.д. всё окружение.
2. Проверить уровень "сытости", если ниже определенного уровня, то пойти и съесть.

Я надеюсь, что это реалистично и верю в Вас!
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
23.07.2014, 15:34
я предлагаю вам вариант ещё одной программы, которую
правда надо хорошо протестировать. Что нового? Овцы перестали
объедаться. Овца съест свои 100% и больше траву не трогает.
Что надо тестировать? Овца в программе может пропасть. Пошла гулять
и нет ее. Может волки съели?? Так ведь и волков нет!! Короче говоря
Реальная программа становится все интереснее и непредсказумее.
А ведь они пока ещё не размножаются. А то и вовсе все разбегутся!!
Буду идти и далее намеченным курсом. Тест необходим. В противном
случае программа выйдет из под контроля и овцы затребуют права человека!!
Удачи вам!
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
DEFINT A-E, I-L, X-Z
DIM a(1 TO 24, 1 TO 24)
DIM b(3 TO 22, 3 TO 22)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
DEF fnz2 (i, j)
   fnz2 = 0
   e = a(i - 2, j - 2) = 3 OR a(i - 2, j - 1) = 3 OR a(i - 1, j - 2) = 3
   IF e THEN fnz2 = 1: GOTO 200
   e = a(i - 2, j + 2) = 3 OR a(i - 2, j + 1) = 3 OR a(i - 1, j + 2) = 3
   IF e THEN fnz2 = 2: GOTO 200
   IF a(i - 1, j) = 3 THEN fnz2 = 3:  GOTO 200
   e = a(i + 2, j - 2) = 3 OR a(i + 2, j - 1) = 3 OR a(i + 1, j - 2) = 3
   IF e THEN fnz2 = 4: GOTO 200
   e = a(i + 2, j + 2) = 3 OR a(i + 2, j + 1) = 3 OR a(i + 1, j + 2) = 3
   IF e THEN fnz2 = 5: GOTO 200
   IF a(i + 1, j) = 3 THEN fnz2 = 6: GOTO 200
   IF a(i, j - 1) = 3 THEN fnz2 = 7: GOTO 200
   IF a(i, j + 1) = 3 THEN fnz2 = 8: GOTO 200
200
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 2 TO 23
   FOR j = 2 TO 23
      a(2, j) = 1: a(23, j) = 1
      a(i, 2) = 1: a(i, 23) = 1
      LOCATE 2, j: PRINT "*"
      LOCATE 23, j: PRINT "*"
      LOCATE i, 2: PRINT "*"
      LOCATE i, 23: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 21 * RND + 1.5
      y = 21 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   IF fnz(x, y) > 0 THEN e = fnz(x, y)
   IF b(x, y) = 100 THEN e = 0
 
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
 
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
  
         IF a(x + dx, y + dy) = 0 THEN
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            c = b(x, y)
            b(x, y) = 0
            x = x + dx
            y = y + dy
            a(x, y) = 2
            b(x, y) = c
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
 
300
   e = fnz2(x, y)
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
   END SELECT
400
   FOR l& = 1 TO 1000000: NEXT
LOOP WHILE INKEY$ = ""
 
CLS
FOR i = 2 TO 21
   FOR j = 2 TO 21
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END
Добавлено через 6 часов 41 минуту
прошелся по всей программе. Усилил контроль за овцами
Может где опечатка, одна из овец может пойти, а может нет
куда-то гулять. Трудно проследить за этим в динамической
программе. Ничего, это даже интересно - поймать и на шашлык!!
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
DEFINT A-E, I-L, X-Z
DIM a(1 TO 24, 1 TO 24)
DIM b(3 TO 22, 3 TO 22)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
DEF fnz2 (i, j)
   fnz2 = 0
   e = a(i - 2, j - 2) = 3 OR a(i - 2, j - 1) = 3 OR a(i - 1, j - 2) = 3
   IF e THEN fnz2 = 1: GOTO 200
   e = a(i - 2, j + 2) = 3 OR a(i - 2, j + 1) = 3 OR a(i - 1, j + 2) = 3
   IF e THEN fnz2 = 2: GOTO 200
   IF a(i - 1, j) = 3 THEN fnz2 = 3:  GOTO 200
   e = a(i + 2, j - 2) = 3 OR a(i + 2, j - 1) = 3 OR a(i + 1, j - 2) = 3
   IF e THEN fnz2 = 4: GOTO 200
   e = a(i + 2, j + 2) = 3 OR a(i + 2, j + 1) = 3 OR a(i + 1, j + 2) = 3
   IF e THEN fnz2 = 5: GOTO 200
   IF a(i + 1, j) = 3 THEN fnz2 = 6: GOTO 200
   IF a(i, j - 1) = 3 THEN fnz2 = 7: GOTO 200
   IF a(i, j + 1) = 3 THEN fnz2 = 8: GOTO 200
200
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 2 TO 23
   FOR j = 2 TO 23
      a(2, j) = 1: a(23, j) = 1
      a(i, 2) = 1: a(i, 23) = 1
      LOCATE 2, j: PRINT "*"
      LOCATE 23, j: PRINT "*"
      LOCATE i, 2: PRINT "*"
      LOCATE i, 23: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 21 * RND + 1.5
      y = 21 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   e = 0
   IF fnz(x, y) > 0 THEN e = fnz(x, y)
   IF b(x, y) = 100 THEN e = 0
 
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
         IF a(x + dx, y + dy) = 0 THEN
            b(x + dx, y + dy) = b(x, y)
            b(x, y) = 0
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            x = x + dx
            y = y + dy
            a(x, y) = 2
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
 
300
   e = fnz2(x, y)
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 400
         IF a(x - 1, y - 1) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
   END SELECT
400
   FOR l& = 1 TO 800000: NEXT
LOOP WHILE INKEY$ = ""
 
'CLS
FOR i = 2 TO 21
   FOR j = 2 TO 21
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END
1
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
23.07.2014, 15:51
Добавить параллельность (чтобы овцы бегали все сразу), модель столкновений (можно например по проценту сытости. та, у которой процент сытости меньше, уступает дорогу к еде более сытой. если у сытой 100% сытости, то она уступает дорогу менее сытой. Богатые богатеют, бедные беднеют. Все как в жизни) и будет вообще сказка
1
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
23.07.2014, 17:13
зря я ругал программу, она работает как часы.
ошибка была в контрольном коде, вот он меня и путал.
Теперь буду двигаться намеченным курсом. Овцы будут
тратить энергию. Полагаю, что единицу времени будет не
сложно ввести. Предполагаю в программе поставить счётчик,
запустить его, обеспечить регулярную выдачу показаний на экран
(с правой стороны) в условных единицах. Ещё шаг к ИИ!!
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
DEFINT A-E, I-L, X-Z
DIM a(1 TO 24, 1 TO 24)
DIM b(3 TO 22, 3 TO 22)
 
DEF fnz (i, j)
   fnz = 0
   IF a(i - 1, j - 1) = 3 THEN fnz = 1: GOTO 100
   IF a(i - 1, j + 1) = 3 THEN fnz = 2: GOTO 100
   IF a(i - 1, j) = 3 THEN fnz = 3:  GOTO 100
   IF a(i + 1, j - 1) = 3 THEN fnz = 4: GOTO 100
   IF a(i + 1, j + 1) = 3 THEN fnz = 5: GOTO 100
   IF a(i + 1, j) = 3 THEN fnz = 6: GOTO 100
   IF a(i, j - 1) = 3 THEN fnz = 7: GOTO 100
   IF a(i, j + 1) = 3 THEN fnz = 8: GOTO 100
100
END DEF
 
DEF fnz2 (i, j)
   fnz2 = 0
   e = a(i - 2, j - 2) = 3 OR a(i - 2, j - 1) = 3 OR a(i - 1, j - 2) = 3
   IF e THEN fnz2 = 1: GOTO 200
   e = a(i - 2, j + 2) = 3 OR a(i - 2, j + 1) = 3 OR a(i - 1, j + 2) = 3
   IF e THEN fnz2 = 2: GOTO 200
   IF a(i - 1, j) = 3 THEN fnz2 = 3:  GOTO 200
   e = a(i + 2, j - 2) = 3 OR a(i + 2, j - 1) = 3 OR a(i + 1, j - 2) = 3
   IF e THEN fnz2 = 4: GOTO 200
   e = a(i + 2, j + 2) = 3 OR a(i + 2, j + 1) = 3 OR a(i + 1, j + 2) = 3
   IF e THEN fnz2 = 5: GOTO 200
   IF a(i + 1, j) = 3 THEN fnz2 = 6: GOTO 200
   IF a(i, j - 1) = 3 THEN fnz2 = 7: GOTO 200
   IF a(i, j + 1) = 3 THEN fnz2 = 8: GOTO 200
200
END DEF
 
RANDOMIZE TIMER
CLS
 
FOR i = 2 TO 23
   FOR j = 2 TO 23
      a(2, j) = 1: a(23, j) = 1
      a(i, 2) = 1: a(i, 23) = 1
      LOCATE 2, j: PRINT "*"
      LOCATE 23, j: PRINT "*"
      LOCATE i, 2: PRINT "*"
      LOCATE i, 23: PRINT "*"
   NEXT j
NEXT i
 
l1 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 2
      b(x, y) = 50
      LOCATE x, y
      PRINT "O"
      l1 = l1 + 1
   END IF
LOOP UNTIL l1 >= 10
 
l2 = 0
DO
   x = 19 * RND + 3
   y = 19 * RND + 3
   IF a(x, y) = 0 THEN
      a(x, y) = 3
      LOCATE x, y
      PRINT "+"
      l2 = l2 + 1
   END IF
LOOP UNTIL l2 >= 50
 
REM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
DO
   DO
      x = 21 * RND + 1.5
      y = 21 * RND + 1.5
   LOOP UNTIL a(x, y) = 2
 
   e = 0
   IF fnz(x, y) > 0 THEN e = fnz(x, y)
   IF b(x, y) = 100 THEN e = 0
 
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 300
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y) + 10
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE ELSE
         dx = 3 * RND - 1.5
         dy = 3 * RND - 1.5
         IF a(x + dx, y + dy) = 0 THEN
            b(x + dx, y + dy) = b(x, y)
            b(x, y) = 0
            a(x, y) = 0
            LOCATE x, y
            PRINT " "
            x = x + dx
            y = y + dy
            a(x, y) = 2
            LOCATE x, y
            PRINT "O"
         END IF
   END SELECT
 
300
   e = fnz2(x, y)
   SELECT CASE e
      CASE 1
         IF x = 3 OR y = 3 THEN 400
         IF a(x - 1, y - 1) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 2
         IF x = 3 OR y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 3
         IF x = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 4
         IF x = 22 OR y = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 5
         IF x = 22 OR y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 6
         IF x = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         x = x + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 7
         IF y = 3 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y - 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
      CASE 8
         IF y = 22 THEN 400
         IF a(x, y) > 0 THEN 400
         LOCATE x, y
         PRINT " "
         a(x, y) = 0
         c = b(x, y)
         b(x, y) = 0
         y = y + 1
         LOCATE x, y
         PRINT "O"
         a(x, y) = 2
         b(x, y) = c
   END SELECT
400
   FOR l& = 1 TO 80000: NEXT
LOOP WHILE INKEY$ = ""
 
'CLS
FOR i = 3 TO 22
   FOR j = 3 TO 22
      IF a(i, j) = 2 THEN PRINT b(i, j);
   NEXT j
NEXT i
END
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2014, 17:13
Помогаю со студенческими работами здесь

Редакторы и языки искусственного интеллекта
Добрый день. Кто нибудь подскажите бесплатные редакторы и языки искусственного интеллекта для Windows

Написать программу искусственного интеллекта
Есть мечта написать программу искусственного интеллекта. Чтобы в процессе программа обучалась и повышала свой уровень. Так же, чтобы...

Реализация алгоритмов искусственного интеллекта
Есть книга: :Реализация алгоритмов искусственного интеллекта на языке PROLOG:

Теоретический способ создания искусственного интеллекта 3
Тема схожа по логике с темой №1 про алфавит, только чуть-чуть интересней (на мой взгляд). Так вот, теперь (гипотетически) берем монитор или...

Системы искусственного интеллекта - разобрать код
Доброго времени суток. Помогите в следующем вопросе... Нужно сделать какое либо задание по система искуственного интелекта (нейронные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru