Обновить
2
Жораев Тимур Юлдашевич@TimurZhoraev

Доцент института МПСУ им. Л. Н. Преснухина

-0,2
Рейтинг
5
Подписчики
Отправить сообщение

Вот именно что абсолютно нормально! Современные процессоры собственно так и проектируются - сначала рисуются прямоугольники а потом специальными алгоритмами под DUV или EUV делаются синтетические маски, которые содержат там всякие плавные переходы, Фурье-закорючки и прочие красивые изящные искусства. Как и на печатных платах раньше сначала прямоугольники а потом шлифовали под 45 градусов алгоритмами, сначала в переходное отверстие прямой проводник а затем каплевидный переход. Ровно тоже самое и здесь сначала делается 3Д скетч который содержит базовую композицию а потом уже осуществляется локальная компоновка хоть эвольвента хоть зубья наклонные или цепная передача. Сеть может сгенерировать базовую компоновку исходя из опыта экспериментов, которые идут на обучение этой же сети.

Не совсем так, перебор может быть осмысленным в плане того что поиск имеет предысторию, то есть производные, этакий градиентный метод. Да и человек делает тоже самое в доказательстве. Фактически любую теорему, доказательство итд можно свести к решению некоторого Диофантового уравнения в поле с ограниченной разрядной сеткой если оно описывается с элементами теории множеств и идентификаторами и наоборот последовательность и доказательство развернуть в уравнение. Как-то так. Сейчас упор сделан именно на это, когда будут более сложные алгебраические элементы с заданными свойствами в нейросети а не просто взвешенная сумма

там и не нужно точно. Достаточно решение в 8 бит арифметике. Там или таблица или пара итераций. В процессе обучения оптимизируется фактически этими же алгоритмами, грубо говоря, ошибка между входным и выходным вектором, расчёт производится также на тензорных ядрах. Там вся эта аксиоматика в человеческом представлении спрятана в веса, функция активации, простейшая причём ReLU это фактически переключатель if-else. Сигнал влазит например в диапазон от 0 до 65535 и является символьным (текстовым) а значит к нему вполне можно применять фактически цифровую обработку нейросетью, что и происходит. Нейросеть может проверить результат привлекая сторонние средства, те же символьные системы из разряда Maple, Maxima, Mathematica итд. Там уж не такая сложная логика и сами по себе ключевые алгоритмы занимают не так много места. Тот же самый Derive под DOS был что-то вроде 600 кБ, что вполне может улечься в коэффициенты нейросети для символического процессора

так в промпте об этом явно сказано - аналог эвольвенты, то есть выбран кирпич. Потому как её он строит с относительными глюками - в любых таких параметрических кривых неоднозначность это знак, как у уравнения окружности плюс минус корень, а сам знак обычно определяется квадратнтом через всякие арктангенсы - этому модель ещё не особо хорошо научили, хотя задачу обратной кинематики для двузвенного манипулятора решает вполне себе годно.
Промпт. хотеть двузвенный манипулятор используй pygame обратить внимание знаки арктангенс два аргумента, перемещение звеньев в плоскости нарисуй плоскость использовать мышь для конечной точки обратная кинематика используй прямые координаты экрана x-y вместо координат сцены питон хорошо среднее колесо мыши приближает отдаляет нажатие средней кнопки мыши крутит сцену

Код
import pygame
import math

# Настройки экрана
WIDTH, HEIGHT = 800, 600
CENTER = (WIDTH // 2, HEIGHT // 2)

# Длины звеньев
L1 = 150
L2 = 120

def solve_ik(target_x, target_y, l1, l2):
    """Обратная кинематика для 2-х звеньев."""
    d2 = target_x**2 + target_y**2
    d = math.sqrt(d2)

    # Проверка достижимости (радиус действия)
    if d > (l1 + l2) or d < abs(l1 - l2):
        return None

    # Закон косинусов для второго угла (theta2)
    cos_theta2 = (d2 - l1**2 - l2**2) / (2 * l1 * l2)
    cos_theta2 = max(-1, min(1, cos_theta2)) # Ограничение для точности
    
    # Elbow down решение
    theta2 = math.acos(cos_theta2)
    
    # Первый угол (theta1) с учетом направления на цель
    # Используем atan2(y, x) для корректных знаков
    theta1 = math.atan2(target_y, target_x) - math.atan2(l2 * math.sin(theta2), l1 + l2 * math.cos(theta2))
    
    return theta1, theta2

def main():
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()
    
    scale = 1.0
    offset_x, offset_y = 0, 0
    dragging = False
    
    running = True
    while running:
        screen.fill((30, 30, 30))
        mx, my = pygame.mouse.get_pos()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            
            # Масштабирование (колесо мыши)
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 4: scale *= 1.1
                if event.button == 5: scale /= 1.1
                if event.button == 2: dragging = True # Нажатие колеса
            
            if event.type == pygame.MOUSEBUTTONUP:
                if event.button == 2: dragging = False
                
            if event.type == pygame.MOUSEMOTION and dragging:
                dx, dy = event.rel
                offset_x += dx
                offset_y += dy

        # Расчет IK (в экранных координатах относительно центра манипулятора)
        # Учитываем смещение и масштаб для корректного наведения
        tx = (mx - (CENTER[0] + offset_x)) / scale
        ty = (my - (CENTER[1] + offset_y)) / scale
        
        angles = solve_ik(tx, ty, L1, L2)
        
        # Рисование сетки (плоскости)
        grid_step = int(50 * scale)
        for x in range((offset_x + CENTER[0]) % grid_step, WIDTH, grid_step):
            pygame.draw.line(screen, (50, 50, 50), (x, 0), (x, HEIGHT))
        for y in range((offset_y + CENTER[1]) % grid_step, HEIGHT, grid_step):
            pygame.draw.line(screen, (50, 50, 50), (0, y), (WIDTH, y))

        # Отрисовка манипулятора
        base_pos = (CENTER[0] + offset_x, CENTER[1] + offset_y)
        
        if angles:
            t1, t2 = angles
            # Прямая кинематика для отрисовки
            x1 = base_pos[0] + L1 * math.cos(t1) * scale
            y1 = base_pos[1] + L1 * math.sin(t1) * scale
            x2 = x1 + L2 * math.cos(t1 + t2) * scale
            y2 = y1 + L2 * math.sin(t1 + t2) * scale
            
            # Линии звеньев
            pygame.draw.line(screen, (200, 200, 200), base_pos, (x1, y1), 5)
            pygame.draw.line(screen, (100, 100, 255), (x1, y1), (x2, y2), 5)
            # Суставы
            pygame.draw.circle(screen, (255, 0, 0), (int(x1), int(y1)), 7)
            pygame.draw.circle(screen, (0, 255, 0), (int(x2), int(y2)), 5)
        
        pygame.draw.circle(screen, (255, 255, 255), base_pos, 10) # Основание
        pygame.display.flip()
        clock.tick(60)

    pygame.quit()

if __name__ == "__main__":
    main()



Не понятно почему нет инициативы ГосВПН - вполне себе можно было бы через Единое окно получать электронный талон на открытие доступа, например, к рабочим группам на запрещённых платформах. Указывается наименование и даётся гарантия использования по назначению, указывается ежедневный объём трафика и его сущность со скриншотом отправляемым в специальном приложении. Либо делается транслятор с участием официально аккредитованного человека, который получает, например, картинку из Макса и вставляет её в телегу, отслеживая контент, затем, обратно из телеги копирует сообщения в легальный мессенджер. Если это будет недорого то вполне годный вариант.

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

С логикой будет абсолютно всё в порядке когда прикрутят сохранение состояния и внедрят более сложные сети Хоупфилда с внутренними обратными связями. По-сути логическая задача локально - это решение СЛАУ для конечного автомата, некий LBA. Набирая этих автоматов можно +- проверить решение по матиндукции как человек. Собственно сейчас и ковыряют трансформеры на этом принципе. Как только доделают - можно уже сказать что глюки носящие вероятностный характер уже в прошлом, модель имеет логический вывод с полноценной памятью.

скорее всего будут нормальные векторные модели, которые собственно вмещают пару десятков килобайт описания из разряда выдавить, продавить сопряжение, касательность и прочие зависимости. Модель вполне может сделать синтез по граничным условиям. Тот же OpenSCAD текстовый вполне себе годен. Промпт: OpenSCAD сделать зубчатое колесо аналог эвольвенты без библиотек 12 зубьев центральное отверстие шпонка сопряжение другое зубчатое колесо 16 звеньев центральный вал
Результат

Код
// --- Parameters (Change these) ---
m = 2;              // Module (Size of teeth)
z1 = 12;            // Gear 1: 12 teeth
z2 = 16;            // Gear 2: 16 teeth
thick = 10;         // Gear thickness
d_shaft = 8;        // Shaft diameter
k_w = 3;            // Keyway width
k_h = 1.5;          // Keyway depth

// --- Calculations ---
$fn = 60;
pa = 20;            // Pressure angle
pitch_dist = m * (z1 + z2) / 2;

// --- Main Module (No Library Needed) ---
module simple_gear(z) {
    pitch_radius = (m * z) / 2;
    addendum = m;
    dedendum = 1.25 * m;
    
    outer_radius = pitch_radius + addendum;
    inner_radius = pitch_radius - dedendum;

    difference() {
        union() {
            // Base Cylinder
            cylinder(r = inner_radius, h = thick);
            
            // Generate Teeth
            for (i = [1:z]) {
                rotate([0, 0, i * (360/z)])
                translate([pitch_radius, 0, thick/2])
                // Simplified trapezoidal tooth
                cube([m * 2, m * 1.2, thick], center=true);
            }
        }

        // Shaft Hole
        translate([0, 0, -1])
            cylinder(d = d_shaft, h = thick + 2);

        // Keyway (Slot)
        translate([-k_w/2, d_shaft/2 - 0.5, -1])
            cube([k_w, k_h + 1, thick + 2]);
    }
}

// --- Render Assembly ---

// Gear 1
color("Cyan") 
    simple_gear(z1);

// Gear 2 (Positioned to mesh)
translate([pitch_dist, 0, 0])
rotate([0, 0, 180/z2]) // Rotate to fit teeth
color("SpringGreen") 
    simple_gear(z2);

Центральный вал конечно пропустил но про шпонку уже представление имеет

Проблема в том, что много кода созданного человеком для человека. И все эти технологии которые сейчас имеются фактически дожатие того что было сделано до появления ИИ. Как только будет код "do not edit machine generated" дело уже пойдёт лучше, да и язык это будет не те которые сейчас лучше всех а те которые специально адаптированы для ИИ с наименьшими глюками и ошибками

Вообще говоря главная пропасть - между просто данными для обучения и подготовленными человеком датасетами. Это отдельное искусство сформировать нужные шаблоны обучения.

Попробуем проиллюстрировать с использованием "высокоэнтропийного" вайбкодинга что же произошло с Землей на начальном этапе лунной программы.
Модель:
Язык змей горыныч модель окружность 1 окружность 2 навстречу друг другу диаметры отношение один к четырём окружность есть 64 точки отрезков аппроксимация каждый отрезок масса отрезки связаны в точках использовать сохранение импульса закон Ньютона столкновение без рассеяния отрезки между собой закон Гука пружинят конечные разности расчёт шаг счёта по времени примерно одна окружность в секунду использовать матплотлиб визуализация

Реализация
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Параметры системы
N = 64              # Точек в окружности
dt = 0.002          # Шаг по времени
k_spring = 8000.0   # Жесткость пружин
m_point = 0.1       # Масса точки
damping = 0.05      # Вязкое трение (стабилизация)

def create_ring(R, offset_x, velocity_x):
    angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
    pos = np.zeros((N, 2))
    pos[:, 0] = offset_x + R * np.cos(angles)
    pos[:, 1] = R * np.sin(angles)
    vel = np.full((N, 2), [velocity_x, 0.0])
    return pos, vel, R

# Инициализация (диаметры 1 к 4)
pos1, vel1, r1 = create_ring(1.0, -3.5, 5.0)
pos2, vel2, r2 = create_ring(4.0, 3.5, -5.0)

def get_forces(pos, r_orig):
    forces = np.zeros_like(pos)
    rest_len = 2 * r_orig * np.sin(np.pi / N)
    for i in range(N):
        p_curr = pos[i]
        p_next = pos[(i + 1) % N]
        diff = p_next - p_curr
        dist = np.linalg.norm(diff)
        f_mag = k_spring * (dist - rest_len)
        f_vec = f_mag * (diff / dist)
        forces[i] += f_vec
        forces[(i + 1) % N] -= f_vec
    return forces

# Подготовка анимации
fig, ax = plt.subplots(figsize=(10, 6))
ax.set_xlim(-12, 12); ax.set_ylim(-6, 6)
line1, = ax.plot([], [], 'r-o', lw=1, ms=2)
line2, = ax.plot([], [], 'b-o', lw=1, ms=2)

def update(frame):
    global pos1, vel1, pos2, vel2
    
    # Расчет сил и столкновений за несколько микрошагов для стабильности
    for _ in range(5):
        f1 = get_forces(pos1, r1) - damping * vel1
        f2 = get_forces(pos2, r2) - damping * vel2
        
        # Столкновение (упрощенно: проверка расстояния между узлами)
        for i in range(N):
            for j in range(N):
                dist_v = pos1[i] - pos2[j]
                if np.linalg.norm(dist_v) < 0.25:
                    # Закон сохранения импульса (m1=m2): усреднение скоростей
                    v_avg = (vel1[i] + vel2[j]) / 2
                    vel1[i] = vel2[j] = v_avg
        
        # Интегрирование
        vel1 += (f1 / m_point) * dt
        pos1 += vel1 * dt
        vel2 += (f2 / m_point) * dt
        pos2 += vel2 * dt

    line1.set_data(np.append(pos1[:, 0], pos1[0, 0]), np.append(pos1[:, 1], pos1[0, 1]))
    line2.set_data(np.append(pos2[:, 0], pos2[0, 0]), np.append(pos2[:, 1], pos2[0, 1]))
    return line1, line2

ani = FuncAnimation(fig, update, frames=200, interval=30, blit=True)
plt.title("Модель Змея Горыныча: столкновение упругих колец (1:4)")
plt.show()

Почти в точку. Сейчас все бизнес-проекты будут не то как попасть в индексацию поисковика а как угодить в RAG и прочие MCP по ключевым тегам не говоря уже о попадании в претренинг когда о компании знает уже сама модель на захардкоженном уровне. Влезть в эту тему на этапе становления - это почище битка.

и правильно делают, они учатся языку промптов, и глючить вместе с ИИ, чтобы не делать плохих запросов. Плюс это отличная обратная связь для развития датасетов претренинга

В своё время читал Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 1999 год, спустя 27 лет актуально и сейчас. Так вот там объект - это нечто, обладающее состоянием, поведением и идентичностью (искал в тексте эти ключевые слова). А для ООП обязательно имеют иерархию наследования и динамическое поведение, грубо говоря таблицу виртуальных функций, представляющую неявное поле типа данных (индекс). С++ скорее просто обогатился синтаксисом из интерпретируемых языков нежели вобрал уж прям нечто совсем концептуальное, ad-hoc полиморфизм уже был тогда, просто сейчас это выглядит как некий макрос с удобной формой записи, как декоратор на Питоне, вобравший assertion. Как только на С++ видится что-то вроде std::memcpy или sizeof(*this) или dynamic/reinterpret_cast или operator x (float16,int8) - это повод взять вновь K&R С, шлифанув пары malloc-free или mutex ИИ-шкой, попросив дописать разрядность к имени функции.

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

Кто будет читать это через 10 лет вопрос: что спереди, телега или лошадь?

Можно также с генератором.

x, y = 250, 250
gen = (x + i is y + i for i in range(11))
for result in gen:
    print(result)

Интересно также что это работает со строками

v = '100' 
x = int(v)+1
y = int(v)+1
print(x is y)

оказывается true

Что-то никак нет ухода от крайностей - текстовый редактор уровня "консоль" и чистый WYSIWYG, нужно что-то среднее между LaTeX и окончательной вёрсткой. То есть должна быть полная взаимосвязь между элементами того что в графике и сам текст хотя-бы имел минимальный скетч из атрибутов - положение, размер шрифта даже если это моноспейс, верхний-нижний индекс. Тогда в окончательную вёрстку попадает полный стиль набор а в промежуточную только прибитое к некоторому условному форматированию. Тоже самое про программирование разделов, нумерации, глав итд. В ворде это сделано как линейный список, годный только для книг. Для более сложной документации содержащей перекрёстные ссылки этот подход не годен, в этом случае там нумерация будет почти как вручную текстом просто сгенерированная автоматически.

Так инструмент в данном случае совершенно искусственный и вообще говоря не ясно какова его актуальность в текущих реалиях. Это как есть куча оснастки для ремонта паровозов но насколько это востребовано сейчас если это конечно не ниша. Но есть другой нюанс на этот счёт. Можно взять идеальный современный ручной инструмент с вырезами под любые пальцы, мягкими накладками, приятно держать, а можно паровозошморгалку, обычную отбойную отвёртку из прошлого века, которая делает тоже самое и вручить её роботу. Она совершенно устарела и неудобна для человека, но зачем спрашивается ему делать задание лично когда есть такой вот помощник, который в принципе неплохо справляется и руки точно не порежет, на крайний заменить можно хоть целиком.

Именно! Так зачем теперь нужно дополнять ценные гигаватт-часы на дополнительные новомодные триллионы токенов, когда банальный С вытягивает 100% проблем. Да, человеку неудобно, а кто сказал что там что-то нужно читать и знать когда есть 100500 различных парсеров, тестов, санитайзеров, которые генерируются или обвязка для которых налету llm-кой. Вплоть до питона, который анализирует С, делает заголовки и код С, заготавливает метрику, отправляет в LLM, делает автоматом рефакторинг, с файлами -конфигами больше уже нет необходимости возиться, да и версия кода не есть версия текста программы по большому счёту. Это про комментарии и их хранилище с нагенерённой документацией и summary от LLM.

1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Инженер электронных устройств, Научный специалист, исследователь
Старший
От 300 000 ₽
Прикладная математика
Разработка программного обеспечения
Оптимизация кода
C
Assembler
Python
Алгоритмы и структуры данных
Объектно-ориентированное проектирование
Многопоточность
Verilog HDL