Кодекс огляду Фергюсона; s Модель; Скептики блокування
від Сью Джин (не справжнє ім’я автора)
[Зверніть увагу: подальший аналіз тепер доступний тут.]
Імперіал нарешті випустив похідну коду Фергюсона. Я вирішив зробити його огляд і надіслати вам деякі речі, які я помітив. Я не знаю вашого минулого, тому прошу вибачення, якщо щось із цього зроблено на неправильному рівні.
Моє походження. Я пишу програмне забезпечення вже 30 років. Я працював у Google між 2006 і 2014 роками, де працював старшим інженером-програмістом, працюючи над Картами, Gmail та захистом облікового запису. Останні п’ять років я провів у американській/британській фірмі, де серед інших робіт та проектів розробляв продукт бази даних компанії. Я також був незалежним консультантом пару років. Очевидно, що я даю лише власну професійну думку і не виступаю за свого нинішнього роботодавця.
Кодекс. Це не код, який проводив Фергюсон, щоб випустити свій знаменитий Звіт 9. Те, що було випущено на GitHub, - це сильно модифікована його похідна, після того, як команда з Microsoft та інших осіб її більше місяця оновлювала. Ця переглянута кодова база розбита на декілька файлів для читабельності та написана на C ++, тоді як оригінальною програмою був "єдиний 15000-рядовий файл, над яким працювали впродовж десятиліття" (це вважається надзвичайно поганою практикою). Запит на оригінальний код було зроблено 8 днів тому, але проігноровано, і, ймовірно, знадобиться якийсь юридичний примус, щоб змусити їх випустити його. Очевидно, що компанія Imperial занадто збентежена державою, щоб коли-небудь звільнити її за власним бажанням, що неприпустимо, враховуючи, що вона була сплачена платником податків і належить їм.
Модель. Те, що він робить, найкраще описати як "SimCity без графіки". Він намагається імітувати домогосподарства, школи, офіси, людей та їх пересування тощо. Я не буду вдаватися далі до основних припущень, оскільки це добре досліджено в інших місцях.
Недетерміновані результати. Через помилки код може давати дуже різні результати при однакових вхідних даних. Вони зазвичай поводяться так, ніби це неважливо.
Ця проблема робить код непридатним для наукових цілей, враховуючи, що ключовою частиною наукового методу є можливість реплікації результатів. Без тиражування висновки можуть бути зовсім не реальними - оскільки область психології з'ясовує свою вартість. Навіть якщо їх оригінальний код був випущений, очевидно, що з них не можуть вийти ті самі цифри, що й у Звіті 9.
Недетерміновані результати можуть мати певне пояснення, оскільки це не те, що раніше хтось використовував як можливість.
У документації сказано:
Модель стохастична. Щоб побачити середню поведінку, слід проводити багаторазові пробіги з різними насінням.
"Стохастичний" - це просто науково звучаче слово для "випадкового". Це не проблема, якщо випадковість є навмисною псевдовипадковістю, тобто випадковість походить від вихідного "насіння", яке повторюється для отримання випадкових чисел. Така випадковість часто використовується в техніках Монте-Карло. Це безпечно, оскільки насіння можна записати і з нього в майбутньому виробляти ті самі (псевдо) випадкові числа. Будь-яка дитина, яка грала в Minecraft, знайома з псевдовипадковістю, тому що Minecraft дає вам насіння, які він використовує для генерування випадкових світів, тому, ділившись насінням, ви можете ділитися світами.
Очевидно, що документація хоче, щоб ми думали, що з урахуванням початкового насіння модель завжди даватиме однакові результати.
Дослідження виявляє істину: код дає критично різні результати, навіть для однакових вихідних насіння та параметрів.
Проілюструю кількома помилками. У випуску 116 британська «червона команда» в Единбурзькому університеті повідомляє, що вони намагалися використовувати режим, який зберігає таблиці даних в більш ефективному форматі для швидшого завантаження, і виявили - на їх подив - що передбачувані прогнози варіювали приблизно на 80 000 смертей після 80 днів:

Цей режим нічого не змінює у світі, що імітується, тому це, очевидно, була помилка.
Відповідь Імперської команди така це не має значення: вони "знають про деякі незначні недетермінізми", але "це історично вважалося прийнятним через загальну стохастичну природу моделі". Зверніть увагу на формулювання тут: Imperial знає, що в їх коді є такі помилки, але поводяться так, ніби це властива випадковості Всесвіту, а не результат аматорського кодування. Очевидно, що в епідеміології різниця в 80 000 смертей - це "невеликий недетермінізм".
Imperial порадив Единбургу, що проблема зникає, якщо ви запускаєте модель в однопоточному режимі, як це роблять вони. Це означає, що вони пропонують використовувати лише одне ядро центрального процесора, а не безліч ядер, які будь-яка відеоігра вдало використовувати. Для моделювання країни використання лише одного ядра процесора, очевидно, є серйозною проблемою - настільки далеко, наскільки це можливо. Тим не менше, саме так Imperial використовує код: вони знають, що він ламається, коли намагається запустити його швидше. З прочитання коду стає зрозуміло, що в 2014 році Imperial намагався змусити код використовувати кілька процесорів для його пришвидшення, але ніколи не змушував його працювати надійно. Відомо, що таке програмування є складним і зазвичай вимагає досвідчених інженерів для отримання хороших результатів. Результати, які випадково змінюються від запуску до запуску, є загальним наслідком помилок безпеки потоків. Більш розмовно, вони відомі як "гайзенбуги".