July 7th, 2021

I like trains

Решение Trolley problem в Грузии и Москве

Одно время, в ожидании, что "вот-вот повсюду будут ездить беспилотные автомобили", очень популярна стала Trolley problem, она же "проблема вагонетки". Едет вагонетка, а на путях 5 человек. Но ты стоишь перед стрелкой, и можешь перевести её, тогда вагонетка переедет на другой путь и задавит лишь 1 человека. Что делать: переводить стрелку или нет? Вроде как, по арифметике, 1 смерть лучше чем 5 смертей. Но если ты "ничего не трогал" - то к тебе и вопросов никаких, а если взял и перевёл - то выходит, сознательно убил того 1 человека, без твоих действий он бы не погиб. И, дескать, пока компьютер не осознает ценности человеческой жизни и всю глубину этой дилеммы - за руль его сажать нельзя!

Но у нас эту проблему давным-давно решили. Сначала в Грузии, согласно анекдоту:

- Вот едешь ты по горной дороге, а её перебегают красивый девушка и некрасивый старый женщина. Кого давить будем?
- Ну, старую женщину, она своё уже отжила...
- Дурак, ТОРМОЗ надо давить, ТОРМОЗ!

И по своему велосипедному опыту, полностью подтверждаю! В любой непонятной ситуации жми на тормоз! Сразу переводишь свою кинетическую энергию в тепло, и ситуация моментально становится не такой опасной. Чего-то там прикидывать, манёвры закладывать, особенно когда речь о неожиданно откуда-то выскочивших пешеходах или собаках - гиблое дело. Они сами будут непредсказуемо передвигаться, и угадать их поведение практически невозможно. А вот тормоз никогда не подводил :)

А потом и в Москве...

Собянин: а я всегда знал, что троллейбусы опасны. Не благодарите!
QuatCore

О выборе самого подходящего CRC-кода

Каюсь, что в вопросе выбора полинома для CRC я исходил из "моды": взял попросту самый популярный из CRC-16, под названием CCITT, 0x1021. Другие названия (в зависимости от выбора начального значения, инверсии битов на входе и на выходе): AUG-CCITT, GENIBUS, MCRF4XX, RIELLO, TMS37157, CRC-A, KERMIT, X-25 и X-MODEM, и это только то, что знает crccalc.com.

Сейчас решил всё-таки поискать, а в чём же, собственно, разница, и какой было бы лучше всего выбрать мне для поставленной задачи: МКО (Mil-Std 1553) со своими проверками чётности, от 1 до 32 слов данных (каждое слово 16 бит), ошибки предполагаются случайными и довольно редкими (вероятность 10-7).

Бешеную активность в этом направлении (исследование CRC) развил Филипп Купман (https://users.ece.cmu.edu/~koopman/crc/). Информации очень много, она "утрамбована", вроде бы наконец разобрался, что с ней делать.

Основная идея: выбрать такой код, который для твоего размера сообщения даст наибольшую возможную дистанцию Хэмминга, т.е позволит ГАРАНТИРОВАННО обнаружить как можно больше неправильных битов.

Collapse )

В общем, мне повезло: ровно в моём случае этот полином CCITT действительно хорошо подходит. Для более коротких сообщений или для более длинных лучше подошли бы другие. А здесь мы имеем гарантированное обнаружение до 3 ошибок, а также любого их нечётного количества, и вероятность 99,997% обнаружить 4 ошибки.