Jedinica 10 / 11

Automatizacija inženjerskih proračuna sa Pythonom

Dobici:

  • Sposobnost automatizacije inženjerskog proračuna, upravljanja jedinicama i obrade podataka pomoću Python koda koji pokreće AI
  • Mogućnost potvrđivanja AI koda pomoću provjere jedinica, testiranja poznatih rezultata i rubnih slučajeva
  • Sposobnost stjecanja navike izrade ponovljivih, sljedivih i verzijama kontroliranih dokumenata računa

U mašinstvu, isti proračun se radi iznova i iznova: naprezanja porodice delova, snaga pumpe za niz radnih tačaka, tabele svojstava pri različitim temperaturama. Ručno ovo raditi je sporo i sklono greškama. Python (programski jezik koji se lako uči sa bogatim bibliotekama za inženjering) automatizuje ove iteracije; To čini račun ponovljivim, sljedivim i kontroliranim verzijama. Umjetna inteligencija (AI) Python je nevjerovatno brz u generiranju koda: pretvaranje formule u funkciju, dodavanje upravljanja jedinicama, čitanje podataka, crtanje grafikona. Ali ovdje postoji opasna zabluda: samo zato što kod radi bez grešaka ne znači da se pravilno izračunava. AI kod može tiho vratiti netačne rezultate zbog pogrešne konverzije jedinica, pogrešne formule ili u rubnim slučajevima, a program će nastaviti raditi bez ikakvih grešaka. Zato je svaki inženjerski kod proizveden sa AI; Ispitni ulazi sa poznatim rezultatima su nepouzdani bez verifikacije provjerom jedinice (veličine) i pokusom rubnih slučajeva. U ovoj jedinici ćete naučiti kako bezbedno postaviti automatizaciju Python naloga sa AI.

Zašto kodni račun? Sljedivost i reproduktivnost

Ručni proračun je jednokratan; Kada se unos promijeni, to se radi od nule i međukoraci se gube. Proračun urađen u kodu je kao dokument: ulazi, formule i izlazi su jasno napisani; promijenite unos i dobijete novi rezultat u roku od nekoliko sekundi; Uz kontrolu verzija (kao git), može se pratiti "šta sam izračunao s kojom vrijednošću na koji datum". Ovo je neprocjenjivo u smislu kontrole i odgovornosti. Ali ova moć zavisi od ispravnosti koda; Pogrešan kod proizvodi pogrešan rezultat, također ponovljivo i brzo.

Savjet: Napišite test za svaku računsku funkciju sa poznatim istinitim rezultatom pored nje (assert u Pythonu). Na primjer, vaša funkcija naprezanja bi trebala dati 28,1 MPa u poznatom uzorku. Ovaj test vas odmah upozorava ako nešto pokvarite kada promijenite kod u budućnosti. Inženjerski kod koji nije testiran je neprovjereni račun.

Upravljanje volumenom: najčešći izvor greške

U inženjerskom kodu većina grešaka dolazi iz jedinica: N sa kN, m sa mm, Pa sa MPa, koje se mogu zbuniti faktorom od 1000 ili 1.000.000. Postoje dvije odbrane. Prva je disciplina: odabir sistema jedne jedinice od početka (npr. N, mm, MPa) i pretvaranje svih ulaza u njega i dodavanje jedinica nazivima varijabli (dužina_mm, sila_N). Drugi je alat: biblioteka poput pint nosi jedinice unutar koda i hvata nedosljednu operaciju kao grešku.

Pristup

Kako to funkcionira

Prednost

Disciplina imenovanja

kao sila_N, dužina_mm

Jednostavno, bez zavisnosti

jednostruki sistem

Sve je pretvoreno u N-mm-MPa

Jednostavnost, brzina

pint biblioteka

Pomera jedinicu po promenljivoj

Automatski hvata nedosljednost

Test poznatih rezultata

referenca sa tvrdnjom

Hvata grešku formule/jedinice

Oprez: Konverzija jedinica možda nedostaje ili nije tačna u kodu generisanom AI-om i kod će i dalje "raditi". Na primjer, ako je promjer mm, a očekuje se da će površina biti m², rezultat će odstupiti 1.000.000 puta, ali program neće dati grešku. Prije pokretanja koda, komentirajte jedinice ulaza i izlaza; zatim dajte rezultat poznatim primjerom.

Korak po korak: kod računa koji se može provjeriti AI

  1. Pojasnite problem i sistem jedinica. Ulazi, izlazi, jedinice.
  2. Generirajte funkciju. Pojedinačni odgovorni, interpretativni, ujedinjeni.
  3. Dodajte poznate rezultate testa. Tvrdite referentnim primjerom.
  4. Isprobajte rubne slučajeve. Nula, negativan, vrlo veliki/mali ulaz.
  5. Uradite provjeru jedinice. Da li jedinica izlaza odgovara onome što se očekuje?
  6. Dokument i verzija. Pretpostavke, izvor, datum; sljedivost s git-om.

Prompt koji generiše funkcije i testove

Uloga: Iskusni Python programer koji piše inženjerske proračune. Zadatak: Napisati funkciju koja izračunava maksimalni napon savijanja u konzolnoj gredi pravokutnog poprečnog presjeka. Ulaz: F (N), L (mm), b (mm), h (mm). Izlaz: sigma (MPa). Konvencija: Sistem jedinica N-mm-MPa; komentirajte jedinicu svakog unosa. Pravilo: koristite I = b*h^3/12 i sigma = M*c/I; komentarišite korake. Pravilo: Dodajte test sa POZNATIM REZULTATOM: sigma ~28,1 MPa za F=500,L=300,b=20,h=40; Provjerite sa assert (mala tolerancija).

Prompt o statusu ivice

Dodajte provjere rubnih slučajeva gornjoj funkciji:- Ako su b, h ili L nula ili negativni, dajte značajnu grešku (povećajte ValueError).- Komentirajte ako postoji problem prekoračenja/preciznosti sa vrlo velikim/malim ulazima. Također dodajte još 3 različita test ulaza i napišite očekivani rezultat; objasniti rezultate na način da ih mogu provjeriti ručno.

Upit za sigurnost jedinice (pinta).

Jedinični siguran isti račun sa bibliotekom 'pint'. Neka su ulazi definirani u jedinicama (npr. 500 * ureg.njuton). Pretvorite izlaz u MPa i odštampajte ga. Dodajte mali primjer koji pokazuje kako pint ne uspijeva kada se dobije unos s pogrešnom jedinicom.

Prompt za provjeru koda

Kritikujte moj kod za inženjerski proračun ispod iz perspektive pregleda koda, ne slažete se sa mnom. Konkretno: da li je konverzija jedinica ispravna, da li je formula tačna, da li su uzeti u obzir ivični slučajevi (nula, negativni), da li su testovi zaista potvrdni? Za svaki nalaz napišite kako ga popraviti.[code]

Slaba prompt / jaka prompt

Slab upit:

Napišite Python kod za proračun stresa.

Nema izbora jedinica, formula, ulaznih definicija i testova; AI generiše kod koji radi, ali nije verifikovan i čija jedinica je nepoznata.

Snažan upit:

Napišite funkciju naprezanja savijanja u konzolnoj gredi. Ulaz F(N), L(mm), b(mm),h(mm); izlazna sigma (MPa). Sistem N-mm-MPa, navedite svaku jedinicu u komentaru. Dodajte test sa poznatim rezultatima (F=500, L=300, b=20, h=40 → ~28,1 MPa, potvrditi). Dajte grešku na nultom/negativnom ulazu. Interpretirajte rubne slučajeve.

Drugi prompt zahtijeva sistem jedinica, formulu, ulaze, test i rubne slučajeve; To čini kod provjerljivim.

Tri mini kućišta (po brojevima)

Slučaj 1 - Greška tihe jačine zvuka. Kalkulacija površine koju proizvodi AI uzima prečnik u mm i daje mm² sa pi*d**2/4, ali sledeći red ga stavlja u formulu koja očekuje m²; Kod radi bez grešaka i daje stres 1.000.000 puta manji. Kada inženjer pokrene test sa poznatim rezultatom (assert abs(sigma-28.1)<0,5), test eksplodira i greška je uhvaćena. Da nije bilo testa, pogrešan rezultat bi neprimijećen ušao u izvještaj. Lekcija: radni kod ≠ ispravan kod.

Slučaj 2 - Pad u rubnom stanju. U kodu koji petlja za familiju delova, debljina h=0 se upisuje u jednom redu; Kada je I = b*h**3/12 = 0, sigma = M*c/I daje podjelu nultom greškom. Zahvaljujući kontroli if h<=0: raise ValueError koju dodaje AI, kod se zaustavlja sa smislenom porukom i ne proizvodi inf. Lekcija: unaprijed rukujte rubnim slučajevima.

Slučaj 3 - Dobitak ponovljivosti. Inženjeru je trebalo pola dana da ručno izračuna snagu pumpe za 40 različitih radnih tačaka. Napisana u AI, skripta čita CSV, izračunava snagu za svaku liniju i potvrđuje poznatu tačku sa assert-om, smanjujući rad na ~2 minute i zapisujući rezultate u datoteku koja se može pratiti. Kada se unos promijeni, cijela tabela se ažurira svake sekunde. Lekcija: provjerena automatizacija je brza i pouzdana.

Uobičajene greške

  • Zabluda "Radilo = ispravno": Misliti da je kod koji radi bez grešaka ispravan.
  • Ne pisanje testova: oslanjanje na kod bez referentnog testa sa poznatim rezultatom.
  • Dvosmislenost jedinica: Ostavljanje ulazno/izlaznih jedinica neinterpretiranim, preskakanje konverzije.
  • Ignoriranje rubnih slučajeva: tiha greška ili pad na nultom/negativnom ulazu.
  • Nedokumentiranje izvora/pretpostavke: Ne zapisivanje izvora i pretpostavke korištene formule.
  • Bez verzioniranja: Ostavljanje naloga kao jednokratne datoteke bez da se može pratiti (git).

Ukratko

  • Python čini inženjersko računanje ponovljivim, sljedivim i kontroliranim verzijama.
  • AI je veoma brz u generisanju koda; Ali činjenica da kod radi bez grešaka ne znači da računa ispravno.
  • Svaki kod treba biti validiran kroz testiranje poznatih rezultata, provjeru jedinice i rubne slučajeve.
  • Jedinične greške su najčešći i najpodmukiji izvor grešaka; Odbrana po sistemu jedne jedinice, nomenklaturi ili pint.
  • Potvrđena automatizacija štedi vrijeme i daje samopouzdanje; Neprovjereni kod je opasan.

Zadatak aplikacije

Odaberite ponavljajući inženjerski proračun (kao što je napon, snaga pumpe, toplotno opterećenje). Napišite Python funkciju u AI koja vrši ovaj proračun; Komentirajte jedinicu svakog ulaza i izlaza i dodajte test potvrđivanja s poznatim rezultatom. Pokrenite test i vidite da li prolazi. Zatim izvršite još dvije provjere: pokušajte s rubnim slučajem (nula ili negativan ulaz) da provjerite da li kod vraća značajnu grešku i ručno navedite jedinicu izlaza u primjeru. Ako je moguće, imajte i verziju sigurnu za jedinicu proizvedenu u litri. Na kraju, dodajte pretpostavke proračuna, izvor formule i datum u kod kao kratak naslov i napišite zašto ovaj kod još uvijek zahtijeva odobrenje inženjera.

kontrolna lista

  • [ ] Ulazne i izlazne jedinice su jasno dokumentirane u kodu; odabran je jednostruki sistem.
  • [ ] Test (assert) sa poznatim rezultatom je dodat i prošao.
  • [ ] Pokušan je barem jedan rubni slučaj (nula/negativan); Kod je dao značajnu grešku.
  • [ ] Jedinica izlaza je data u ručnom primjeru (bez pretpostavke "radio = ispravno").
  • [ ] Izvor formule, pretpostavke i datum navedeni u kodu.
  • [ ] Račun se može pratiti/pratiti; konačno odobrenje prepušteno je inženjeru.