Я попросил Chat GPT создать физическую симуляцию группы молекул гелия, перемещающихся в контейнере и выдающих среднюю температуру с течением времени.
Я буду честен, как ни удивительно, как ChatGPT отлично справляется с тем, что его просили сделать, по крайней мере, с точки зрения кода, это намного веселее, потому что я чувствую, что я своего рода ученый (хотя и кабинетный). ), который исследует глубины и границы постоянно расширяющегося искусственного интеллекта. Я планирую публиковать эти статьи еженедельно, но я чувствую, что мощь ChatGPT потенциально может увеличиваться даже сверхлинейно, если не экспоненциально, от недели к неделе. К концу года, держу пари, он сделает мою стирку!
Процесс
Процесс занял несколько итераций, но, похоже, он сработал. Первая подсказка, которую я использовал, была:
создайте физическую симуляцию контейнера, наполненного молекулами газа, с помощью java-скрипта. Молекулы должны быть простыми двухатомными молекулами газообразного гелия. Также в дополнение к физике столкновений также добавьте поправки на силы Ван-дер-Вальса и примените искажение к механике молекул на основе этих сил
На какой чат GPT ответил:
Хотя это было очень информативно, в конечном итоге это не дало того, что я просил. Итак, демонстрируя чудесную силу А.И. чтобы адаптироваться к повторяющимся ответам, я спросил его:
- создайте простую 2D-демонстрацию всего вышеперечисленного в java-скрипте до уровня сложности, который вы можете запрограммировать
Наконец-то он начал что-то выводить! Но я хотел еще несколько вещей, чтобы я мог назвать это правильным началом физической симуляции:
- используя массу ядра гелия и скорости молекул газа, есть метка, которая выводит температуру ящика в любой момент. Используйте статистическую механику для расчета температуры
И наконец:
- обновите приведенный выше код, чтобы добавить метку в формате html под контейнером с газом. Справа от контейнера с газом есть небольшая рамка, которая объясняет кинетическую теорию газов, а под ней находится соответствующее уравнение
Окончательный код после нескольких исправлений ChatGPT и объединения всех его выводов:
<!DOCTYPE html> <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"></script> <style> body { margin: 0; } #temperature { position: absolute; bottom: 0; } #theory { position: absolute; right: 0; padding: 10px; background-color: #f2f2f2; } </style> </head> <body> <script> let container; let molecules = []; let vdwConstant = 1; let vdwRadius = 50; let temperature; let k = 1.38e-23; function setup() { createCanvas(600, 600); container = new Container(width / 2, height / 2, width / 2 - 50, height / 2 - 50); for (let i = 0; i < 100; i++) { molecules.push(new Molecule(random(width), random(height), random(-2, 2), random(-2, 2))); } } function draw() { background(255); container.display(); updateTemperature(); for (let i = 0; i < molecules.length; i++) { let m1 = molecules[i]; m1.collide(container); m1.update(); m1.display(); for (let j = i + 1; j < molecules.length; j++) { let m2 = molecules[j]; let distance = dist(m1.x, m1.y, m2.x, m2.y); if (distance < vdwRadius) { let force = vdwConstant / (distance * distance); let angle = atan2(m2.y - m1.y, m2.x - m1.x); m1.applyForce(force, angle); m2.applyForce(force, angle + PI); } } } } function updateTemperature(){ let kineticEnergy = 0; for (let i = 0; i < molecules.length; i++) { let m = molecules[i]; kineticEnergy += 0.5 * m.mass * (m.vx * m.vx + m.vy * m.vy); } temperature = 2 * kineticEnergy / (molecules.length * k); console.log("Temperature: " + temperature); document.getElementById("temperature").innerHTML = "Temperature: " + temperature; } </script> <div id="temperature"></div> <div id="theory"> <p>Kinetic theory of gases:</p> <p>The average kinetic energy of a gas molecule is directly proportional to the temperature of the gas.</p> <p>T = 2 * kineticEnergy / (N * k)</p> </div> </body> <script> class Container { constructor(x, y, w, h) { this.x = x; this.y = y; this.w = w; this.h = h; } display() { stroke(0); noFill(); rectMode(CENTER); rect(this.x, this.y, this.w * 2, this.h * 2); } } class Molecule { constructor(x, y, vx, vy) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.mass = 4; this.radius = 2; } display() { stroke(0); fill(0); ellipse(this.x, this.y, this.radius * 2, this.radius * 2); } update() { this.x += this.vx; this.y += this.vy; } collide(container) { if (this.x + this.radius > container.x + container.w) { this.vx *= -1; this.x = container.x + container.w - this.radius; } else if (this.x - this.radius < container.x - container.w) { this.vx *= -1; this.x = container.x - container.w + this.radius; } if (this.y + this.radius > container.y + container.h) { this.vy *= -1; this.y = container.y + container.h - this.radius; } else if (this.y - this.radius < container.y - container.h) { this.vy *= -1; this.y = container.y - container.h + this.radius; } } applyForce(force, angle) { this.vx += force * cos(angle) / this.mass; this.vy += force * sin(angle) / this.mass; } } </script> </html>
И видео конечного результата. Довольно удивительно! Я не могу дождаться, чтобы увидеть, какие более сложные симуляции я смогу создать с помощью этого после некоторых уговоров!