Revizuirea codului Ferguson; s Model; Scepticii Lockdown
de Sue Denim (nu numele real al autorului)
[Vă rugăm să rețineți: o analiză de urmărire este acum disponibilă aici.]
Imperial a lansat în cele din urmă un derivat al codului lui Ferguson. M-am gândit că voi face o recenzie și vă voi trimite câteva dintre lucrurile pe care le-am observat. Nu vă cunosc trecutul, așa că vă scuzați dacă unele dintre acestea sunt prezentate la un nivel greșit.
Trecutul meu. Scriu software de 30 de ani. Am lucrat la Google între 2006 și 2014, unde am fost inginer software principal care lucra pe Maps, Gmail și securitatea contului. Am petrecut ultimii cinci ani la o firmă din SUA/Marea Britanie unde am proiectat produsul bazei de date a companiei, printre alte locuri de muncă și proiecte. De asemenea, am fost consultant independent timp de câțiva ani. Evident, îmi dau doar propria părere profesională și nu vorbesc pentru angajatorul meu actual.
Codul. Nu este codul pe care Ferguson l-a executat pentru a produce faimosul său Raport 9. Ceea ce a fost lansat pe GitHub este un derivat puternic modificat al acestuia, după ce a fost actualizat de peste o lună de o echipă de la Microsoft și alții. Această bază de cod revizuită este împărțită în mai multe fișiere pentru lizibilitate și scrisă în C ++, în timp ce programul original era „un singur fișier de 15.000 de linii la care s-a lucrat timp de un deceniu” (aceasta este considerată o practică extrem de slabă). O cerere pentru codul original a fost făcută acum 8 zile, dar ignorată și probabil va fi nevoie de un fel de constrângere legală pentru a-i face să fie eliberați. În mod clar, Imperialii sunt prea jenați de starea de a-l elibera vreodată din propria lor voință, ceea ce este inacceptabil, dat fiind că a fost plătit de contribuabil și le aparține.
Modelul. Ceea ce face este cel mai bine descris ca „SimCity fără grafică”. Încearcă să simuleze gospodăriile, școlile, birourile, oamenii și mișcările acestora etc. Nu voi merge mai departe în ipotezele subiacente, deoarece acest lucru este bine explorat în altă parte.
Rezultate nedeterministe. Datorită erorilor, codul poate produce rezultate foarte diferite, având date de intrare identice. În mod obișnuit, aceștia acționează ca și când acest lucru nu ar fi important.
Această problemă face codul inutilizabil în scopuri științifice, dat fiind că o parte cheie a metodei științifice este capacitatea de a reproduce rezultatele. Fără replicare, descoperirile s-ar putea să nu fie deloc reale - deoarece domeniul psihologiei a aflat la costul său. Chiar dacă codul lor original a fost lansat, este evident că aceleași numere ca în Raportul 9 s-ar putea să nu iasă din el.
Rezultatele nedeterministe ar putea avea o oarecare explicație, deoarece nu este ceva pe care cineva l-a plătit anterior ca posibilitate.
Documentația spune:
Modelul este stocastic. Pentru a vedea un comportament mediu, ar trebui să se efectueze alergări multiple cu semințe diferite.
„Stochastic” este doar un cuvânt cu sunet științific pentru „aleator”. Aceasta nu este o problemă dacă aleatoritatea este pseudoaleatorie intenționată, adică întâmplarea este derivată dintr-o „sămânță” inițială care este iterată pentru a produce numerele aleatoare. O astfel de întâmplare este adesea utilizată în tehnicile Monte Carlo. Este sigur, deoarece sămânța poate fi înregistrată și aceleași (pseudo-) numere aleatorii produse din ea în viitor. Orice copil care a jucat Minecraft este familiarizat cu pseudo-aleatoriu, deoarece Minecraft îți oferă semințele pe care le folosește pentru a genera lumile aleatorii, deci prin partajarea semințelor poți împărtăși lumi.
În mod clar, documentația dorește să ne gândim că, având în vedere o serie inițială, modelul va produce întotdeauna aceleași rezultate.
Investigația relevă adevărul: codul produce rezultate extrem de diferite, chiar și pentru semințe și parametri de pornire identici.
Voi ilustra cu câteva bug-uri. În numărul 116, o „echipă roșie” din Marea Britanie de la Universitatea din Edinburgh raportează că au încercat să utilizeze un mod care stochează tabelele de date într-un format mai eficient pentru o încărcare mai rapidă și au descoperit - spre surprinderea lor - că predicțiile rezultate au variat cu aproximativ 80.000 de decese după 80 de zile:

Acest mod nu schimbă nimic în legătură cu simularea lumii, deci acest lucru a fost evident o eroare.
Răspunsul echipei imperiale este că nu contează: sunt „conștienți de unele mici nedeterminisme”, dar „acest lucru a fost considerat istoric acceptabil din cauza naturii stochastice generale a modelului”. Rețineți expresia aici: Imperial știe că codul lor are astfel de erori, dar acționează ca și cum ar fi o anumită aleatorie inerentă a universului, mai degrabă decât un rezultat al codificării amatorilor. Aparent, în epidemiologie, o diferență de 80.000 de decese este „un mic nedeterminism”.
Imperial a sfătuit Edinburgh că problema dispare dacă rulați modelul în modul cu un singur fir, așa cum fac ei. Acest lucru înseamnă că sugerează utilizarea unui singur nucleu CPU mai degrabă decât numeroasele nuclee pe care orice joc video le-ar folosi cu succes. Pentru o simulare a unei țări, utilizarea unui singur nucleu de procesor este, evident, o problemă gravă - cât de departe poți obține de la supercomputere. Cu toate acestea, așa folosesc Imperial codul: știu că se rupe atunci când încearcă să îl ruleze mai repede. Din citirea codului reiese clar că în 2014 Imperial a încercat să facă codul să utilizeze mai multe procesoare pentru a-l accelera, dar niciodată nu a făcut ca acesta să funcționeze în mod fiabil. Se știe că acest tip de programare este dificil și necesită, de obicei, ingineri experimentați pentru a obține rezultate bune. Rezultatele care se schimbă aleatoriu de la o rulare la alta sunt o consecință obișnuită a erorilor de siguranță a firului. Mai colocvial, acestea sunt cunoscute sub numele de „Heisenbugs”.