Sun’iy intellekt bilan juftlikda dasturlash (Pair-Programming) orqali elastik to‘qnashuvlar va vektor arifmetikasiga asoslangan kichik fizika dvigateli kodini yozish
Kompyuter simulyatsiyalari va kompyuter o‘yinlarining markaziy qismi — qattiq jismlar to‘qnashuvini aniq hisoblovchi fizik dvigatel (Physics Engine) hisoblanadi. Mazkur laboratoriya mashg‘ulotida 6-laboratoriyada tuzilgan kuchlar va harakat tenglamalari asosida 2D Vektor arifmetikasi, doiralar to‘qnashuvini aniqlash, impuls skalyari ($J$) almashinuvi hamda yopishib qolish (sticky collision) muammosini bartaraf etuvchi to‘liq dvigatel yaratiladi. Claude (yoki boshqa zamonaviy LLM) bilan juftlikda dasturlash (Driver / Navigator) metodologiyasida kod xatoliklari tuzatiladi, ChatGPT Code Interpreter (hozirgi nomi — ChatGPT’dagi ma’lumotlar tahlili vositasi) muhitida esa impuls va energiyaning saqlanish qonunlari sonli tekshiriladi.
📋 8-laboratoriya mashg‘uloti rejasi va tahliliy bosqichlari:
TPACK va ZPD tamoyillari asosida 2D vektor arifmetikasi, impuls va elastik to‘qnashuvlar bo‘yicha diagnostik test hamda shaxsiy ta’lim trayektoriyasi.
Vector2D klassi, to‘qnashuvni aniqlash, normal va tangensial tezliklar, impuls skalyari $J$ va massalar nisbati arxitekturasi.
Driver va Navigator rollari; 4 ta kritik fizik nosozlik (vektorlarni skalyar qo‘shish, sticky collision, energiya dreyfi, tunneling) auditi.
Impuls va kinetik energiya saqlanishining sonli tekshiruvi: 10 000 ta tasodifiy to‘qnashuv (Monte-Karlo) sinovi va xatoliklar taqsimoti.
1. Sun’iy intellekt uchun kognitiv diagnostika va individual ta’lim trayektoriyasi
Fizika dvigatelini kodlash talabadan ham chuqur nazariy fizika (Nyutonning uchinchi qonuni, impuls va kinetik energiya saqlanishi, elastik va noelastik to‘qnashuvlar dinamikasi), hamda 2D vektor arifmetikasi va obyektga yo‘naltirilgan dasturlash (OOP) bilimlarini talab etadi. TPACK (Mishra va Koehler, 2006) va ZPD (Vygotskiy, 1978) konsepsiyalariga asoslangan quyidagi 4 ta diagnostik savol orqali talabaning kognitiv profili aniqlanadi va Claude bilan juftlikda ishlash uchun shaxsiy prompt generatsiya qilinadi.
🧠 Boshlang‘ich kognitiv diagnostika testi (4 ta savol):
1. Ikki qattiq shar (2D) to‘qnashganda, ularning chiziqli tezlik vektorlari qaysi yo‘nalish bo‘ylab o‘zgaradi?
2. Fizika dvigatelida to‘qnashuvdan keyin sharlar bir-biriga yopishib qolish yoki bir-birining ichiga kirib ketish ("Sticky balls / Overlap bug") sababi nima va u qanday yechiladi?
3. Sun’iy intellekt bilan juftlikda dasturlashda (AI Pair-Programming) optimal metodologiya qanday taqsimlanadi?
4. ChatGPT Code Interpreter orqali yozilgan fizika dvigatelini matematik verifikatsiya qilishda qaysi fizik mezonlar tekshiriladi?
2. Fizika dvigatelini Claude bilan yozish: vektor arifmetikasi va to‘qnashuvlar dinamikasi
Kompyuter fizik dvigateli (Physics Engine) — tabiatning mexanik qonuniyatlarini raqamli muhitda diskret vaqt qadamlari orqali modellashtiruvchi dasturiy majmuadir. 6-laboratoriyada tuzilgan FBD (Erkin jism diagrammasi) kuchlar muvozanati endi dinamik to‘qnashuv impulslari bilan boyitiladi.
2.1. 2D vektor arifmetikasi (Vector2D Class)
Fizik kattaliklar (koordinata $\vec{r}$, tezlik $\vec{v}$, tezlanish $\vec{a}$, kuch $\vec{F}$, impuls $\vec{p}$) yo‘nalishga ega vektorlar bo‘lgani sababli, skalyar $x, y$ o‘zgaruvchilari o‘rniga maxsus Vector2D klassi joriy etiladi:
- Vektorlar yig‘indisi va ayirmasi: $\vec{a} \pm \vec{b} = (a_x \pm b_x)\hat{i} + (a_y \pm b_y)\hat{j}$
- Skalyarga ko‘paytirish va bo‘lish: $k \vec{a} = (k a_x)\hat{i} + (k a_y)\hat{j}$
- Skalyar ko‘paytma (dot product): $\vec{a} \cdot \vec{b} = a_x b_x + a_y b_y = |\vec{a}| |\vec{b}| \cos\theta$
- Modul (uzunlik) va normalizatsiya: $|\vec{a}| = \sqrt{a_x^2 + a_y^2}; \quad \hat{n} = \frac{\vec{a}}{|\vec{a}|}$
constructor(x = 0, y = 0) { this.x = x; this.y = y; }
add(v) { return new Vector2D(this.x + v.x, this.y + v.y); }
sub(v) { return new Vector2D(this.x - v.x, this.y - v.y); }
mult(s) { return new Vector2D(this.x * s, this.y * s); }
div(s) { return s !== 0 ? new Vector2D(this.x / s, this.y / s) : new Vector2D(); }
dot(v) { return this.x * v.x + this.y * v.y; }
magSq() { return this.x * this.x + this.y * this.y; }
mag() { return Math.sqrt(this.magSq()); }
normalize() { const m = this.mag(); return m > 0 ? this.div(m) : new Vector2D(); }
}
2.2. To‘qnashuvni aniqlash va impuls yechimi (Impulse-Based Resolution)
Ikki doiraviy qattiq jism (markazlari $\vec{r}_1, \vec{r}_2$, radiuslari $R_1, R_2$) to‘qnashuvi masofa orqali aniqlanadi:
To‘qnashuv chizig‘i bo‘ylab birlik normal vektor (1-shardan 2-sharga yo‘nalgan): $\hat{n} = \frac{\Delta \vec{r}}{d}$. Nisbiy tezlik: $\vec{v}_{rel} = \vec{v}_1 - \vec{v}_2$. Normal yo‘nalishdagi tezlik proyeksiyasi: $v_n = \vec{v}_{rel} \cdot \hat{n}$. Agar $v_n > 0$ bo‘lsa, jismlar yaqinlashmoqda va to‘qnashuv yuz beradi.
Nyutonning tiklanish qonuni ($e \in [0, 1]$ tiklanish koeffitsiyenti bo‘lib, $e=1$ mutlaq elastik, $e=0$ noelastik) va impuls saqlanishiga binoan, to‘qnashuv impulsi skalyari $J$ quyidagi formula bo‘yicha hisoblanadi (Hecker, 1997; Millington, 2010). Bu yerda $J \le 0$ chiqadi, ya’ni 1-shar $\hat{n}$ ga qarshi, 2-shar esa $\hat{n}$ bo‘ylab itariladi (sharlar aylanmaydi va ishqalanish hisobga olinmaydi deb faraz qilinadi):
2.3. Yopishib qolishni bartaraf etish (Penetration va Overlap Resolution)
Diskret vaqt qadamli ($\Delta t$) simulyatsiyalarda to‘qnashuv paytida jismlar bir-birining ichiga $\delta = (R_1 + R_2) - d$ masofaga kirib qoladi. Agar ularning pozitsiyasi to‘g‘rilanmasa va $v_n > 0$ (yaqinlashish) sharti tekshirilmasa, keyingi kadrda ham $d < R_1 + R_2$ bo'lib, impuls uzoqlashayotgan jismlarga qayta qo'llanadi va ular bir-biriga "yopishib", titrab qoladi.
Yechim — pozitsiyani massalarga teskari proporsional ravishda siljitish:
3. Juftlikda dasturlash va debugging: Claude bilan hamkorlik
Juftlikda dasturlash (Pair-Programming) — ikki dasturchi bitta kod ustida ishlaydigan usul. Williams va boshq. (2000) tajribasida juftliklar yozgan dasturlar avtomatik testlardan ko‘proq o‘tgan, umumiy sarflangan vaqt esa biroz (taxminan 15% ga) oshgan. AI bilan juftlikda ishlash inson bilan ishlashning to‘liq o‘rnini bosmaydi: masalan, GitHub Copilot bo‘yicha nazorat tajribasida vazifa 55,8% tezroq bajarilgan (Peng va boshq., 2023), biroq AI taklif qilgan kodni har doim o‘zingiz tushunib, sinab ko‘rishingiz shart. Ushbu laboratoriyada talaba Driver (amaliy kod yozuvchi va interfeysni boshqaruvchi), Claude esa Navigator (algoritm arxitekturasi, fizik qonunlarga muvofiqlik va nosozliklarni izlovchi mutaxassis) rolini bajaradi.
🔍 Fizika dvigatellarida eng ko‘p uchraydigan 4 ta tipik nosozlik va AI auditi:
1-nosozlik: Vektorlarni skalyar qo‘shish xatosi (Scalar Arithmetic Bug)
Matematik xato
Alomati: Qiya to‘qnashuvda jismlar noto‘g‘ri yo‘nalishda sakraydi (masalan, faqat gorizontal bo‘ylab), impuls vektori saqlanmaydi.
Sababi: Talaba vx1 = vx1 + J deb skalyar qiymat qo‘shadi, holbuki impuls faqat normal vektor $\hat{n}$ bo‘yicha yo‘naltirilishi lozim.
2-nosozlik: Sharlar yopishib qolishi va titrashi (Sticky Collision Bug)
Geometrik xato
Alomati: Kam tezlikdagi to‘qnashuvda ikkita shar bir-birining ichidan chiqa olmay, markazda titrab qoladi va sekin aylanadi.
Sababi: Pozitsiya to‘g‘rilanmagan (overlap resolution yo‘q) va $v_n > 0$ sharti tekshirilmagan. Keyingi kadrda ham masofa $d < R_1 + R_2$ bo'lib, dvigatel ularni yana qayta to'qnashdi deb hisoblaydi va uzoqlashayotgan sharlarni bir-biriga qaytarib itaradi.
3-nosozlik: Energiya dreyfi va "Portlashi" (Energy Drift / Explosion)
Integratsiya xatosi
Alomati: $e = 1$ bo‘lsa ham, vaqt o‘tishi bilan to‘liq energiya sekin (yoki keskin) ortib boradi, sharlar tobora tezlashadi.
Sababi: To‘qnashuv impulsining o‘zi $e = 1$ da energiyani saqlaydi, shuning uchun manba boshqa joyda: (1) og‘irlik kuchi yoki prujina kuchlari oshkor Eyler usulida hisoblangan (x += v*dt dan keyin v += a*dt — energiya har qadamda ortadi, 4-laboratoriyaga qarang); (2) $J$ formulasida ishora yoki massa xatosi (masalan, $(1+e)$ o‘rniga $2(1+e)$); (3) pozitsiyani to‘g‘rilash siljishi keyin tezlikka aylantirilgan. Yechim — Eyler–Kromer (yarim-oshkor) usuli va har bir qadamdan keyin $E_k$ ni kuzatib borish.
4-nosozlik: Tunnel effekti (Tunneling at High Velocity)
Integratsiya xatosi
Alomati: Katta tezlikda harakatlanayotgan kichik shar devor yoki boshqa shar bilan to‘qnashmasdan, uning ichidan to‘g‘ridan-to‘g‘ri o‘tib ketadi.
Sababi: Bir kadr oralig‘idagi siljish $\Delta r = v \cdot \Delta t$ to‘siq qalinligidan katta bo‘lgani sababli, oraliq kontakt holati hisoblanmay qoladi. Yechimi — Sub-stepping (kichik ichki qadamlarga bo‘lish, shart: $v \cdot \Delta t_{sub} < R$) yoki uzluksiz to'qnashuv aniqlash (Continuous Collision Detection — to'qnashuv vaqtini analitik topish).
4. Fizik qonunlar algoritmi tekshiruvi: ChatGPT Code Interpreter muhitida verifikatsiya
Fizika dvigatelining ilmiy ishonchliligi uning fundamental saqlanish qonunlariga (Kinetik energiya va To‘liq impuls vektori) qanchalik qat’iy amal qilishiga bog‘liq. ChatGPT Code Interpreter (keyinchalik "Advanced Data Analysis" deb nomlangan) Python muhitida to‘qnashuv formulalarini 10 000 ta tasodifiy to‘qnashuv (Monte-Karlo) asosida sinovdan o‘tkazish va xatoliklar taqsimotini hisoblash imkonini beradi. Quyidagi skriptni o‘zingiz ham ishga tushirib, AI bergan natijalar bilan solishtiring: $e = 1$ da impuls va energiya xatoligi faqat suzuvchi nuqta yaxlitlash darajasida (~$10^{-13}$) bo‘lishi kerak.
🐍 ChatGPT Code Interpreter uchun Python matematik verifikatsiya skripti:
import numpy as np
import matplotlib.pyplot as plt
def test_elastic_collision_conservation(num_trials=10000):
np.random.seed(42)
# 1. Boshlang‘ich parametrlar: massalar [0.5, 10.0] kg, tezliklar [-50, 50] m/s
m1 = np.random.uniform(0.5, 10.0, num_trials)
m2 = np.random.uniform(0.5, 10.0, num_trials)
v1 = np.random.uniform(-50, 50, (num_trials, 2))
v2 = np.random.uniform(-50, 50, (num_trials, 2))
# Tasodifiy to‘qnashuv normal vektori n (|n| = 1)
angles = np.random.uniform(0, 2 * np.pi, num_trials)
normal = np.column_stack([np.cos(angles), np.sin(angles)])
# 2. Boshlang‘ich saqlanish kattaliklari
p_initial = (m1[:, None] * v1) + (m2[:, None] * v2)
Ek_initial = 0.5 * m1 * np.sum(v1**2, axis=1) + 0.5 * m2 * np.sum(v2**2, axis=1)
# 3. Nisbiy tezlik va impuls skalyari J (e = 1.0 mutlaq elastik)
rel_vel = v1 - v2
v_normal = np.sum(rel_vel * normal, axis=1)
# Faqat yaqinlashayotgan to‘qnashuvlar (v_normal > 0)
valid = v_normal > 0
m1, m2 = m1[valid], m2[valid]
v1, v2 = v1[valid], v2[valid]
normal = normal[valid]
v_normal = v_normal[valid]
p_initial = p_initial[valid]
Ek_initial = Ek_initial[valid]
e = 1.0 # Elastik tiklanish
J = -(1.0 + e) * v_normal / (1.0 / m1 + 1.0 / m2)
# 4. To‘qnashuvdan keyingi tezliklar
v1_final = v1 + (J[:, None] * normal) / m1[:, None]
v2_final = v2 - (J[:, None] * normal) / m2[:, None]
# 5. Yakuniy saqlanish kattaliklari
p_final = (m1[:, None] * v1_final) + (m2[:, None] * v2_final)
Ek_final = 0.5 * m1 * np.sum(v1_final**2, axis=1) + 0.5 * m2 * np.sum(v2_final**2, axis=1)
# 6. Xatoliklar tahlili
p_error = np.linalg.norm(p_final - p_initial, axis=1)
Ek_error = np.abs(Ek_final - Ek_initial) / Ek_initial * 100 # %
print(f"Muvaffaqiyatli sinovlar soni: {len(v_normal)}")
print(f"Maksimal Impuls xatoligi: {np.max(p_error):.2e} kg*m/s")
print(f"Maksimal Kinetik Energiya xatoligi: {np.max(Ek_error):.2e} %")
return p_error, Ek_error
p_err, ek_err = test_elastic_collision_conservation()
📋 ChatGPT Code Interpreter uchun matematik audit topshirig‘i:
5. Fizik dvigatelning interaktiv dastgohi va saqlanish qonunlari telemetriyasi
Quyidagi laboratoriya dastgohida Vector2D arifmetikasi, doira-doira to‘qnashuvi impulsi va kesishishni bartaraf etish (overlap resolution) algoritmlari to‘liq real vaqt rejimida ishlaydi. Telemetriya oynasida to‘liq kinetik energiya va impuls vektori jonli kuzatiladi. Masshtab: 100 piksel = 1 m. Devorlar mutlaq elastik, lekin ular tashqi jism bo‘lgani uchun devorga urilganda sharlar tizimining impulsi o‘zgaradi; energiya esa $e = 1$ da saqlanadi.
⚙️ Tajriba boshqaruvi
📊 Telemetriya va saqlanish qonunlari
6. Akademik baholash rubrikasi (100 ball) va ilmiy-metodologik manbalar
Talabalarning 8-laboratoriya mashg‘uloti bo‘yicha erishgan amaliy va nazariy natijalari quyidagi 5 ta mezon bo‘yicha baholanadi.
💯 100 Ballik baholash mezonlari kalkulyatori:
📚 Foydalanilgan manbalar (APA 7):
- Anthropic. (2024, June 20). Claude [Announcement]. https://www.anthropic.com/news/claude-3-5-sonnet
- Fiedler, G. (2004). Fix your timestep! Gaffer On Games. https://gafferongames.com/post/fix_your_timestep/
- Hecker, C. (1997, February/March). Physics, part 3: Collision response. Game Developer Magazine, 11–18. https://chrishecker.com/Rigid_Body_Dynamics
- Millington, I. (2010). Game physics engine development: How to build a robust commercial-grade physics engine for your game (2nd ed.). Morgan Kaufmann.
- Mishra, P., va Koehler, M. J. (2006). Technological pedagogical content knowledge: A framework for teacher knowledge. Teachers College Record, 108(6), 1017–1054. https://doi.org/10.1111/j.1467-9620.2006.00684.x
- OpenAI. (2023, March 23). ChatGPT plugins [Code interpreter taqdimoti]. https://openai.com/index/chatgpt-plugins/
- Peng, S., Kalliamvakou, E., Cihon, P., va Demirer, M. (2023). The impact of AI on developer productivity: Evidence from GitHub Copilot. arXiv. https://doi.org/10.48550/arXiv.2302.06590
- Vygotsky, L. S. (1978). Mind in society: The development of higher psychological processes. Harvard University Press.
- Williams, L., va Kessler, R. (2002). Pair programming illuminated. Addison-Wesley Professional.
- Williams, L., Kessler, R. R., Cunningham, W., va Jeffries, R. (2000). Strengthening the case for pair programming. IEEE Software, 17(4), 19–25. https://doi.org/10.1109/52.854064