thedeemon: (passport)
Результаты моделирования от Imperial College COVID-19 Response Team, 16 March 2020. Чего и когда можно ожидать в UK и US при разных стратегиях сдерживания и без оных.

Greene

Mar. 16th, 2020 01:54 pm
thedeemon: (faculty of numbers)
Ходили седьмого числа с сыном послушать телепроповедника популяризатора науки Брайана Грина (суперструнщик, который "Элегантную вселенную" написал и еще ряд подобных книжек).





Он там ближе к концу завел речь про Больцмановский мозг, и оказалось, что саму идею появляющегося из случайных флуктуаций вакуума мозга я раньше знал, но вот замысел, зачем эта гипотетическая штука вообще привлекалась, как-то пропустил. Речь о том, что исходя из современных представлений о будущем вселенной - когда там Солнце погубит Землю, когда галактики разлетятся, когда звезды потухнут, когда вся материя вплоть до протонов разорвется на части, когда наконец последние черные дыры испарятся - за все это время подходящая пора для нашей с вами жизни очень коротка, а пора, когда теоретически возможно случайное возникновение больцмановского мозга в вакууме, намного порядков продолжительнее, и возникает мысль, что оказаться таким мозгом для вас намного более вероятно, чем родиться тут на Земле, т.е. весьма вероятно, что все ваши знания и вся ваша память ложные, они возникли только что случайно, а через мгновение ваш больцмановский мозг погибнет. И получается, что если доверять современным представлениям/знаниям о физике, то с большой вероятностью эти представления и знания ложны, сами же предсказывают свою иллюзорность. Но только если при этом они верны (касательно рассуждений и оценок про мозги в вакууме).

Carroll

Jan. 23rd, 2020 11:39 am
thedeemon: (faculty of numbers)
Вчера довелось послушать Шона Кэрролла живьем, он тут на соседней улице в The Royal Institution выступал с лекцией по мотивам недавно вышедшей книги. Посвященная многомировой интерпретации книга напечатана в Англии издательством One World.







Поскольку времени было мало, лекция получилась очень сжатой и поверхностной. Но все равно, кажется, мне что-то удалось лучше понять интуитивно про декогеренцию. Надо будет свериться с формулами теперь, проверить.

thedeemon: (Default)
А вот еще язык подвезли: http://concurnas.com/
Не знаю, как там с качеством реализации, но чисто синтаксически очень порадовал.
thedeemon: (Default)
Наконец-то нормальный язык подвезли. Там в описании прекрасно все:
https://github.com/Storyyeller/IntercalScript

Phantom values порадовали особенно.
thedeemon: (Default)


Я ожидал худшего, а тут прямо очень интересное выступление получилось, и котейка у нее отличный. Рекомендую послушать.
thedeemon: (Default)
Славный прибрежный городок Weymouth:


Парк роллеркостеров на западном краю Лондона:
thedeemon: (Default)
Недавно почитал/послушал три книжки на общую тему: физики пишут о смысле квантовой механики. О том, что она, возможно, говорит о мире, помимо формул вычисления вероятностей.

David Deutsch, "The Fabric of Reality: The Science of Parallel Universes and Its Implications", 1997.
У меня были большие надежды на эту книжку. Как-никак пионер квантовых вычислений. Который, как говорят, заявлял, что лишь многомировая интерпретация КМ объясняет мощь и работоспособность квантовых компьютеров. Дойч меня сильно разочаровал. Книжка получилось совершенно ужасная. Очень много текста, где он нудно пережевывает банальности, и несколько интересных нетривиальных моментов, которые он излагает коротко, невнятно и совсем неубедительно. Подробностей и примеров сейчас уже не назову, успел позабыть. Что в книжке занятно - интересный способ говорить о многомировой интерпретации (или чем-то вроде нее) в терминах "теневых фотонов" и "теневых частиц". Если вспомнить подход интегралов по траекториям, волновую функцию можно рассматривать как результат взаимодействия множества альтернативных траекторий частицы, по которым всем она как бы движется одновременно. Дойч все эти альтернативные траектории, летящие параллельно "копии" частицы называет "теневыми", которые при этом взаимодействуют с "настоящей" - той, что мы наблюдаем в итоге. Конечно, единственное отличие "настоящей" от "теневых" лишь в том, в каком из "миров" мы находимся, в каждом из них одна своя выглядит "настоящей", а остальные - "теневыми". Но в целом книжку эту не советую.

Sean Carroll, "Something Deeply Hidden: Quantum Worlds and the Emergence of Spacetime", 2019.
Я "джва года ждал" (с) ее выхода. Когда эта книга уже была готова, и до выхода оставалась пара дней, автор выпустил серию своего подкаста, где за пару часов практически пересказал все содержание, может даже еще лучше, чем в самой книжке. Рекомендую ту серию послушать, она взрывает мозг и делает это несколько раз. В книжке у него примерно все то же, но более подробно. Последовательно излагается многомировая интерпретация (MWI), показывается, почему она самая простая и прямая. Что это "суровая квантовая механика" - что получается, если брать чисто формулы и их предсказания за содержание, не добавляя никаких дополнительных постулатов вроде коллапса волновой функции, различия между квантовым и классическим мирами и т.п. Недавно широко известная в узких кругах теорфизики Sabine Hossenfelder сперва похвалила эту книжку Кэрролла, а потом отдельным постом попыталась объяснить, в чем ее претензии к многомировой интерпретации, но у меня так и не получилось ухватить ее мысль, даже после некоторых ее уточнений в комментариях. По-моему, Кэрролл на все ее вопросы в книжке ответил, но ей так не кажется. Кроме изложения MWI Кэрролл понятно рассказывает про некоторые альтернативы, вроде спонтанного коллапса в GRW, Pilot wave Бома и др. Успевает поговорить "как с этим жить" - о философских и моральных следствиях из MWI. Хорошо проясняет многие околотехнические вопросы: например, как MWI сочетается с теорией относительности, как она может не нарушать локальность (в отличие от многих других подходов). Плюс отдельно рассказывает про свежие направления теоретических исследований в поисках способа подружить кванты с гравитацией. Многие моменты я раньше слышал у него и у Susskind'a, но было непонятно, а тут многое стало. Например, в каком смысле разные области вакуума квантово запутаны друг с другом. И как лежит путь (или пути) от фон-неймановской энтропии до эйнштейновской гравитации. Эта последняя часть книги очень интересная, причем излагается на пальцах, без формул. А если раньше некоторые ключевые формулы уже видел, то это очень помогает make sense of it, без них все может звучать слишком уж далеким полетом фантазии. Там и про черные дыры, и про AdS/CFT correspondence, и про голографическую вселенную, и пр. Рекомендую!
Где-то в середине Кэрролл смело берется разъяснить как в MWI возникают вероятности и правило Борна, и вот тут, имхо, получается слабо и неубедительно. Он там быстро от frequentist-ской вероятности прыгает к околобайесовской, приводит какие-то рассуждения про ее применение к self-locating uncertainty (пока мы не увидели результат измерения, мы не знаем, в котором из миров находимся, можем оценивать разные вероятности исходов), но как из этого получить обратно вероятность в смысле статистики измерений, я так и не понял пока. И не я один, если верить следующему автору.
После прочтения есть шанс с одной стороны получить ответы на многие вопросы по MWI, лучше понять ее логику и механизмы, но с другой стороны обрести новые вопросы, увидеть какие-то новые моменты, которые делают MWI еще менее понятной в итоге.

Adam Becker, "What Is Real?: The Unfinished Quest for the Meaning of Quantum Physics", 2018.
Click-baity заголовок долго меня отпугивал от этой книжки, но после явной наводки Кэрролла я все же решил ее открыть. И скажу вам, это лучшая книга, что я вообще читал/слушал в этом году, и может быть не только в этом. Книга не топит ни за одну конкретную интерпретацию (в отличие от явного эвереттиста Кэрролла), не дает окончательных ответов (увы), зато очень здорово рассказывает историю развития взглядов, идей и интерпретаций за последние 115 лет. Все основные персонажи - Планк, Эйнштейн, Бор, Гейзенберг, Шредингер, фон Нейман, Бом, Уилер, Эверетт, Белл, Дойч, Zeh, Zurek и пр. - показаны очень живыми и конкретными людьми в конкретных исторических событиях, видно, как их идеи не возникали из воздуха, а рождались в интересной борьбе на фоне других важных событий, часто не относящихся напрямую к науке. И написана очень увлекательно, читается не хуже этого вашего Джорджа Р.Р. Мартина. Почему с Бором было плохо ходить в кино. Как его вывозили на особом самолете. Как Гейзенберг участвовал в немецкой ядерной программе при Гитлере. Как Бома чуть не посадили за связи с коммунистами, как он скрывался в Бразилии и потом лишился американского гражданства за то, что обзавелся бразильским паспортом вместо изъятого ранее американского. Как Эверетт придумал многомировую интерпретацию в качестве наиболее халявной диссертации. Как он потом занимался разработкой сценариев ядерной войны, а по вечерам со стаканчиком спиртного в руке пересматривал любимый Dr. Strangelove. Кто сформулировал знаменитое "shut up and calculate!" (а вовсе не Фейнман). Как финансирование науки раздулось во время и после второй мировой, и как сдулось обратно после антивоенных протестов во время вьетнамской войны. Как попытки заниматься основаниями квантовой механики становились "черной меткой" и могли запросто поставить крест на карьере...
Бекер здорово излагает все основные интерпретации квантов в их развитии, и их связь с протекавшей тогда эволюцией философии тоже - про "махизм", логический позитивизм, научный реализм и т.д. В чем заключается копенгагенская интерпретация, и есть ли она, если она нигде толком не сформулирована... Все это собирается в большой пазл, все разные его части обретают свой смысл. И в каждой части видны свои проблемы, нигде окончательного ответа не находится, увы. Но книжку очень рекомендую!
thedeemon: (Default)
(подслушано у А. Бекера, о котором в соседнем посте)
В околонаучных обсуждениях часто любят вспоминать про фальсифицируемость, что дескать теория лишь тогда научна, когда есть некий эксперимент или возможны некие наблюдения, которые бы могли ее опровергнуть, если вдруг покажут что-то ей противоречащее.
Вот, например, законы Ньютона в применении к движению планет. Они здорово описывали движение Земли, Марса, Юпитера и пр. Но не Урана. С Ураном был косяк, не вписывался. Что тогда сделали? Выбросили ньютоновскую механику как фальсифицированную? Нет, придумали добавить еще одну гипотетическую планету, движение которой влияло на Уран. Потом ее и правда нашли - Нептун.
Затем с Меркурием тоже вышел косяк, опять ньютоновская механика не описывала его орбиту точно. Ну, тут уже понятно было, что делать, еще одна планета - Вулкан. Но нет, в этот раз таки ньютоновскую гравитацию фальсифицировали, благо уже новую подвезли - общую теорию относительности.
Спасибо Квайну, он разъяснил: не получается никакую теорию ни верифицировать (привет позитивистам), ни фальсифицировать саму по себе, всегда теории завязаны на кучу других теорий и предположений, которые мы явно или неявно полагаем истинными. И когда какое-то наблюдение противоречит гипотезе А, это наблюдение запросто может быть вызвано не ложностью А, а ложностью другого предположения Б, на которое А опирается...
thedeemon: (Default)
В одной из ветвей волновой функции вселенной вы сегодня проснулись и задумались о том, что будет, если запрограммировать очень простую игрушечную модель квантовой механики и поиграться с ее параметрами. Не знаю, что там получилось у вас, но вот что получилось у меня.
У Ричарда Фейнмана есть чудесная "книжка" (запись публичной лекции) "QED: The Strange Theory of Light and Matter", где он наглядно на пальцах объясняет кое-какие азы, не прибегая к формулам. По сути он там излагает подход "sum over histories", он же "интегралы по траекториям". Если у нас из точки А вылетает частица, и мы хотим найти вероятность обнаружить ее позже в точке В, то мы делаем следующее. При движении частицы по некоторому пути Фейнман предлагает представить стрелку, которая крутится как на часах пока частица по этому пути летит. Дальше он предлагает взять все-все мыслимые пути из А в В, для каждого прокрутить такую стрелку, и все эти стрелки сложить как вектора. Квадрат длины такой стрелки и даст нам искомую вероятность (после нормализации). Понятно, что хотя он формулы не приводит, стрелки это комплексные числа, а их кручение это eiφ(t). На деле там eiS/h, где S это величина действия, интеграл по времени от лагранжиана вдоль траектории. У частицы нет какой-то одной определенной траектории, вместо этого она летит как бы сразу по всем, а суммирование амплитуд позаботится о том, чтобы траектории близкие к стационарному значению действия (минимуму/максимуму) складывались конструктивно и давали вклад большой, а отклонения от таких траекторий в разные стороны складывались деструктивно, с разными знаками, таким образом нейтрализуя друг друга, от них общий вклад будет маленький, отсюда автоматически возникает принцип наименьшего (стационарного на самом деле) действия, на котором вся механика стоит (и оптика). Такая формулировка может показаться очень непохожей на обычную квантовую механику 20-х годов, где есть волновая функция и ее эволюция по уравнению Шрёдингера, но одна из другой несложно выводится, см. например первые несколько страниц здесь.
Вот это и запрограммируем, делов-то. Возьмем двумерную коробку единичного размера. Из середины нижней границы будем запускать частицы. И в разных точках будем их "ловить" - считать суммарную амплитуду. Для интереса перегородим коробку стенкой, в к которой просверлим две дырки - будет у нас двухщелевой эксперимент, второй по знаменитости во всей КМ. Траектории будем прокладывать случайным образом из отрезков, проходящих через случайные точки (частица может прыгать туда-сюда совершенно не заботясь ни о каких законах движения). Если отрезок пролегает через стенку, то такую траекторию выбрасываем, не считаем, стенки у нас будут непроницаемыми для частиц. У нас есть ровно одна траектория из А в В, состоящая из одного отрезка, и сколько угодно траекторий с одной или более промежуточными точками. Осталось решить как вычислять действие - как крутить стрелки. Возьмем самый простой игрушечный вариант: действие при движении вдоль отрезка пропорционально его длине: hc * len, где hc - некоторый коэффициент, связанный с постоянной Планка h, обратно ей пропорциональный (ибо в оригинале там S/h). Вот и все. Код:
Read more... )
thedeemon: (Default)
Сегодня на работе писал очень веселый код - со смайликами!
...
mergeTypes t1 (t2:ts) = (t2 :) <$> mergeTypes t1 ts
...
fs <- mapM (\(fld, ty) -> silly ty <&> (Str (fld ++" : ") :)) $ M.assocs row
...

Много ли языков их используют?

Logic

Sep. 15th, 2019 10:39 pm
thedeemon: (Default)
На днях проходил мимо такого объявления:


Интуитивно чувствуется, что связка & там уместна, и последнее утверждение как бы нейтрализует предыдущие ложные утверждения и преврещает всю формулу в истину. Но вот как бы ее записать на языке формальной логики? И какого порядка это логика?

RC

Sep. 12th, 2019 12:26 pm
thedeemon: (Default)
В интернетах обсуждают очередное сравнение скорости работы разных языков, на этот раз на примере user mode сетевых драйверов. С непреодолим как скорость света. Раст отстает, то ли из-за bounds checks, то ли из-за другого кодогенератора (LLVM vs. GCC). Неожиданно хорошо выступил C#, там есть value типы и слайсы/спаны, можно снизить нагрузку на GC до нуля практически, есть unsafe блоки и указатели. Близко к нему Go. Java отстала. Окамл получился быстрее Хаскеля. Но самый позорный результат из компилируемых языков - у Swift'a. И ведь не первый раз я вижу, что он так тормозит. Комментарии из их статьи:

Swift increments a reference counter for each object passed into a function and decreases it when leaving the function. This is done for every single packet as they are wrapped in Swift-native wrappers for bounds checks. There is no good way to disable this behavior for the wrapper objects while maintaining an idiomatic API for applications using the driver. A total of 76% of the CPU time is spent incrementing and decrementing reference counters. This is the only language runtime evaluated here that incurs a large cost even for objects that are never free’d.

Вот вам и "RC быстрее GC".

Занятное про Хаскель:
Compiler (GHC 8.4.3) optimizations seem to do more harm than good in this workload. Increasing the optimization level in the default GHC backend from O1 to O2 reduces throughput by 11%. The data in the graph is based on the LLVM backend which is 3.5% faster than the default backend at O1. Enabling the threaded runtime in GHC decreases performance by 8% and causes the driver to lose packets even at loads below 1 Mpps due to regular GC pauses of several milliseconds.
thedeemon: (Default)
fn helper<'a, 'b, T>(_: &'a &'b (), v: &'b T) -> &'a T { v }

/// Turn any `&T` into a `&'static T`. May introduce undefined behavior.
pub fn make_static<'a, T>(input: &'a T) -> &'static T {
    let f: fn(_, &'a T) -> &'static T = helper;
    f(&&(), input)
}

(отсюда)
Не ожидал, что так просто. Безо всякого unsafe берем и превращаем "одолженную" ссылку на временное значение в "вечную", с соответствующими use-after-free последствиями. А просто дырка в borrow checker'e, и давно уже, все никак не залатают.
thedeemon: (Default)
Из недавней поездки.

Сказочный замок на островке, который соединяется с сушей дорогой лишь во время отлива.


Локальный край света - самая западная точка Англии.


Просто занятные места Jurassic Coast:


thedeemon: (Default)


Из недавней поездки на юго-запад Англии.
Происхождение и возраст фигуры толком неизвестны, в литературе упоминается с середины 18-го века.
thedeemon: (Default)
По мотивам поста Никиты про разницу в производительности "высокоуровнего/функционального" и "низкоуровнего/императивного" кода. Взял буквально его пример с созданием массива пар чисел. Его оригинал на кложе:
(concat
 (mapv
    (fn [y] [from-x y])
    (range from-y (quot to-y 2)))
  (mapv
    (fn [y] [to-x y])
    (range (quot to-y 2) to-y)))

Как быстро он работает - не представляю.

Попробовал обе версии - "функциональную" и "императивную" - записать на D в качестве эксперимента, посмотреть, насколько компилятор справляется это дело развернуть.
struct Point { int x, y; }

auto f(int from_y, int to_y, int from_x, int to_x) {
    return chain( iota(from_y, to_y/2).map!(y => Point(from_x, y)),
                  iota(to_y/2, to_y)  .map!(y => Point(to_x, y)) ).array;   
}

auto g(int from_y, int to_y, int from_x, int to_x) {
    auto res = new Point[to_y - from_y];
    foreach(y; from_y .. to_y)
        res[y - from_y] = Point(y < to_y / 2 ? from_x : to_x, y); 
    return res;
}

На 60 миллионах точек ( f(20_000_000, 80_000_000, 1, 2) ) "функциональный" у меня работает 167 мс, "императивный" - 146 мс, разница в пределах 15%. Терпимо.
(полный текст тут, компилятор - LDC)

Попробовал записать это дело на хаскеле, но в нем я нуб, не знаю, как правильно его готовить. Вот такой вариант
import qualified Data.Vector.Unboxed as V
type Point = (Int, Int)

f :: Int -> Int -> Int -> Int -> V.Vector Point
f from_y to_y from_x to_x =
    let a = V.generate (to_y `div` 2 - from_y) (\y -> (from_x, y+from_y))
        b = V.generate (to_y - to_y `div` 2)   (\y -> (to_x, y + to_y `div` 2))
    in V.concat [a, b]

на тех же исходных данных работает 1.33 сек, т.е. примерно на порядок медленнее. Другие варианты, что я пробовал, еще медленнее. Например, если data Point = P {-# UNPACK #-} !Int !Int, то оно уже не Unboxed, и если просто Data.Vector для них использовать, то время больше трех секунд уже.
Вопрос хаскелистам: как вы unboxed массив простых структур делаете?

Profile

thedeemon: (Default)
Dmitry Popov

May 2025

S M T W T F S
    123
45678910
11 121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 23rd, 2025 05:36 pm
Powered by Dreamwidth Studios