Опыт работы с нейронными сетями и простой код на Ассемблере.

Тема в разделе "WASM.BEGINNERS", создана пользователем dcc0, 17 май 2026.

Метки:
  1. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    512
    Ahimov, а какая у вас конфигурация компьютера ? Сколько обычной памяти в компьютере ( 128 GB или сколько?) и сколько видеопамяти содержит видеокарта (24 GB или сколько?) ? И какой у вас тариф ? Платный или бесплатный ?
     
  2. dcc0

    dcc0 Member

    Публикаций:
    2
    Регистрация:
    22 дек 2022
    Сообщения:
    107
    Так, я все время ругал нейронные сети, но надо и похвалить.
    Вот этот мой код нейронная сеть (alice.yandex) удачно конвертировала из PHP в C89.
    Поиск всех путей на однонаправленном графе.
    Исходник:
    Код (Text):
    1. <?php
    2. /*Поиск всех путей на ориентированном графе из точки а в точку f
    3. на основе упорядочивания массивов и элементов массива по возрастанию
    4. Легко доработать до поиска кратчайшего пути.*/
    5.  
    6. function search_new_val_for_push_int_x($x, $j, $arr) {
    7.     foreach($arr as $key => $val) {
    8.         if($x[count($x) - 1] == $key)
    9.             return $arr[$key];
    10.     }
    11. }
    12.  
    13. function search_val($x, $j, $arr) {
    14.     foreach($arr as $key => $val) {
    15.         if($x[$j - 1] == $key)
    16.             return $arr[$key];
    17.     }
    18. }
    19.  
    20. // Упорядоченный граф
    21. $a = array('b', 'c', 'd');
    22. $b = array('d', 'e', 'f');
    23. $c = array('d', 'e', 'f');
    24. $d = array('e', 'f');
    25. $e = array('f');
    26. $f = array();
    27.  
    28. // Первый путь
    29. $x = array('a', 'b', 'd', 'e', 'f');
    30.  
    31. // Массив соответствий
    32. $arr = array('a' => $a, 'b' => $b, 'c' => $c, 'd' => $d, 'e' => $e, 'f' => $f);
    33.  
    34. // Печатаем первый маршрут
    35. print_r($x);
    36. print "\n";
    37.  
    38. $j = count($x) - 1;
    39.  
    40. while($j != 0) {
    41.     // Ищем новое значение. Значение будет использовано в качестве имени массива.
    42.     $ar = search_val($x, $j, $arr);
    43.     $key = array_search($x[$j], $ar);
    44.     //if (${$x[$j-1]}[$key+1] != '') {
    45.  
    46.     if (isset($ar[$key + 1])) {
    47.         $x = array_slice($x, 0, $j);
    48.         array_push($x, $ar[$key + 1]);
    49.         //$z=$x[count($x)-1];
    50.         //найдем все 0-ые индексы
    51.         $z = search_new_val_for_push_int_x($x, $j, $arr)[0];
    52.  
    53.         while (1) {
    54.             if ($x[count($x) - 1] == 'f') {
    55.                 array_push($x, $z);
    56.                 break;
    57.             }
    58.             array_push($x, $z);
    59.             $z = search_new_val_for_push_int_x($x, $j, $arr)[0];
    60.         }
    61.         $j = count($x);
    62.         print_r($x);
    63.     }
    64.     $j--;
    65. }
    66. ?>
    67.  
    68.  
    Код конвертированный сетью:

    Код (C):
    1. #include <stdio.h>
    2. #include <string.h>
    3.  
    4. /* Максимальное количество вершин в пути.
    5.    Граф небольшой, 20 достаточно с запасом. */
    6. #define MAX_PATH 26
    7.  
    8. /* Функция возвращает указатель на массив соседей для данной вершины.
    9.    Вершины: 'a'..'f'. Возвращает NULL для неверной вершины. */
    10. static const char *get_neighbors(char v) {
    11.     switch (v) {
    12.    case 'a': return "bcdz";
    13.         case 'b': return "defz";
    14.         case 'c': return "defz";
    15.         case 'd': return "efz";
    16.         case 'e': return "fz";
    17.         case 'f': return "ghjz";
    18.         case 'g': return "hijz";
    19.         case 'h': return "ijkz";
    20.         case 'i': return "jklz";
    21.         case 'j': return "kmz";
    22.         case 'k': return "lnoz";
    23.         case 'l': return "mz";
    24.         case 'm': return "noz";
    25.         case 'n': return "oz";
    26.         case 'o': return "pz";
    27.         case 'p': return "qz";
    28.         case 'q': return "rz";
    29.         case 'r': return "sz";
    30.         case 's': return "tuz";
    31.         case 't': return "uvz";
    32.         case 'u': return "vwz";
    33.         case 'v': return "wz";
    34.         case 'w': return "xyz";
    35.         case 'x': return "yz";
    36.         case 'y': return "z";
    37.         case 'z': return "";
    38.         default:  return NULL;
    39.     }
    40. }
    41.  
    42. /* Вспомогательная функция: найти индекс символа в строке.
    43.    Возвращает -1, если не найден. */
    44. static int str_index_of(const char *s, char c) {
    45.     int i = 0;
    46.     while (s[i] != '\0') {
    47.         if (s[i] == c) return i;
    48.         i++;
    49.     }
    50.     return -1;
    51. }
    52.  
    53. int main(void) {
    54.     int p =0;
    55.     /* Первый путь (из PHP-скрипта) */
    56.     char path[MAX_PATH];
    57.     int path_len = 0;
    58.  
    59.     /* Инициализация первого пути: a -> b -> d -> e -> f */
    60.     path[path_len++] = 'a';
    61.     path[path_len++] = 'b';
    62.     path[path_len++] = 'd';
    63.     path[path_len++] = 'e';
    64.     path[path_len++] = 'f';
    65.     path[path_len++] = 'g';
    66.     path[path_len++] = 'h';
    67.     path[path_len++] = 'i';
    68.     path[path_len++] = 'j';
    69.     path[path_len++] = 'k';
    70.     path[path_len++] = 'l';
    71.     path[path_len++] = 'm';
    72.     path[path_len++] = 'n';
    73.     path[path_len++] = 'o';
    74.     path[path_len++] = 'p';
    75.     path[path_len++] = 'q';
    76.     path[path_len++] = 'r';
    77.     path[path_len++] = 's';
    78.     path[path_len++] = 't';
    79.     path[path_len++] = 'u';
    80.     path[path_len++] = 'v';
    81.     path[path_len++] = 'w';
    82.     path[path_len++] = 'x';
    83.     path[path_len++] = 'y';
    84.     path[path_len++] = 'z';
    85.  
    86.     /* Вывод первого маршрута */
    87.     {
    88.         int i;
    89.         for (i = 0; i < path_len; i++) {
    90.             if (i > 0) printf(", ");
    91.             printf("%c", path[i]);
    92.         }
    93.         printf("\n");
    94.     }
    95. p++;
    96.     int j = path_len - 1;
    97.  
    98.     while (j > 0) {
    99.  
    100.         char current_v = path[j - 1];
    101.         const char *neighbors = get_neighbors(current_v);
    102.  
    103.         /* В PHP: $ar = search_val($x, $j, $arr); */
    104.         /* Здесь neighbors — это аналог $ar */
    105.  
    106.         int key = str_index_of(neighbors, path[j]);
    107.  
    108.         /* if (isset($ar[$key + 1])) */
    109.         if ((key != -1) && (neighbors[key + 1] != '\0')) {
    110.             /* $x = array_slice($x, 0, $j); */
    111.             path_len = j;
    112.  
    113.             /* array_push($x, $ar[$key + 1]); */
    114.             path[path_len++] = neighbors[key + 1];
    115.  
    116.             /* Достраиваем путь до 'f', всегда беря первого (нулевого) соседа */
    117.             while (1) {
    118.  
    119.                 char last_v = path[path_len - 1];
    120.                 if (last_v == 'z') {
    121.                     break;
    122.                 }
    123.                 const char *next_neighbors = get_neighbors(last_v);
    124.                 /* В PHP: search_new_val_for_push_int_x(...)[0] */
    125.                 if (next_neighbors[0] != '\0') {
    126.                     path[path_len++] = next_neighbors[0];
    127.                 } else {
    128.                     /* Если нет соседей, а мы не в 'f', дальше идти некуда.
    129.                        В логике PHP это не обрабатывается явно, но предотвратим зацикливание. */
    130.                     break;
    131.                 }
    132.             }
    133.  
    134.             j = path_len;
    135.  
    136.             /* print_r($x); */
    137.             {
    138.                 int i;
    139.  
    140.                 for (i = 0; i < path_len; i++) {
    141.                     if (i > 0) printf(", ");
    142.                     printf("%c", path[i]);
    143.                 }
    144.  
    145.                 printf("\n");
    146.                 p++;
    147.  
    148.  
    149.             }
    150.         }
    151.  
    152.         j--;
    153.     }
    154. printf("Количество путей: %d",p);
    155.     return 0;
    156. }
    157.