From 8b32d2d9b6574e9506fe61c94149ca3a1e6391ac Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 23 Jul 2023 23:53:57 +0200 Subject: [PATCH] start adding nuclear probabilities --- examples/08_nuclear_war/example | Bin 0 -> 22320 bytes examples/08_nuclear_war/example.c | 47 ++++++++++++++++ examples/08_nuclear_war/makefile | 53 +++++++++++++++++++ examples/08_nuclear_war/scratchpad/example | Bin 0 -> 22280 bytes examples/08_nuclear_war/scratchpad/example.c | 20 +++++++ examples/08_nuclear_war/scratchpad/makefile | 53 +++++++++++++++++++ 6 files changed, 173 insertions(+) create mode 100755 examples/08_nuclear_war/example create mode 100644 examples/08_nuclear_war/example.c create mode 100644 examples/08_nuclear_war/makefile create mode 100755 examples/08_nuclear_war/scratchpad/example create mode 100644 examples/08_nuclear_war/scratchpad/example.c create mode 100644 examples/08_nuclear_war/scratchpad/makefile diff --git a/examples/08_nuclear_war/example b/examples/08_nuclear_war/example new file mode 100755 index 0000000000000000000000000000000000000000..d5a34625d8c245d9bc6e48486d449e4b7d43aa40 GIT binary patch literal 22320 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.J3O zW73OP#yaOqje>qzYxM{4UKYjh&`geo7rl&e&MlJ+A@YdeqIbaFia)l}XEs)nXkcc|UlASBd>TG~S`Qlplp zj$kO@6-{oj4gL6` z$De>IZ2^D1x4qr%4Fvpw#MtxZ3YA;Do>okB11NY1vbWl}4R6gE8=8Wtx{_Y7GlrvZ zqSxvqW87}M*GF6cLRt972cLe*OMS=~$zp_G#!O1ja+6|$?3w(Io@5DlQIG*qrjP)4 zse7)QYZZ{bV$ma2R2=PFTY{bqfWZKVjk3n<+NL=0kk{+j*cx)czHQz>aH|2eA=HF7 zZ#6Xtlxu0_oSxz4eMC=?(A48%5@7Y=AV`;xc#&;~cV%p*$^35XRXN8Hxi} zcneaZ%*LM^(j5-AXxJn3BJZyyl;=UBo6*WT!Rzs%qZi39@53duq0d<4x+`&X`(Wg+ z#rj7@LOX9JzOfu7l}faX{PMnDLR%6w-Qy&eZ=i|aW6^en6?x7jp&VbHbEWF<0T7lm}Bs^pjFQBA4heqge|bM7VIc`O6zM;S z`aLQ{BKhTck%Si|p@6C5znaQFmlMkKrP>sR)bZa0IlYfdq@Be1lYGBpD!pt=_%3)= z1HU}q&=v!UBI$T*tS#}Mpo3ypjxW!% +#include +#include + + + +double probability_of_dying_nuno(uint64_t* seed){ + double first_year_russian_nuclear_weapons = 1953; + double current_year = 2023; + double laplace_probability_nuclear_exchange_next_year = sample_beta(current_year-first_year_russian_nuclear_weapons, 0, seed); + + double london_hit_conditional_on_russia_nuclear_weapon_usage = sample_beta(7.67, 69.65, seed); + // I.e., a beta distribution with a range of 0.05 to 0.16 into: https://nunosempere.com/blog/2023/03/15/fit-beta/ + // 0.05 were my estimate and Samotsvety's estimate in March 2022, respectively: + // https://forum.effectivealtruism.org/posts/KRFXjCqqfGQAYirm5/samotsvety-nuclear-risk-forecasts-march-2022#Nu_o_Sempere + double informed_actor_not_able_to_escape = sample_beta(3.26212166586967, 3.26228162008564, seed); + // 0.2 to 0.8, i.e., 20% to 80%, again using the previous tool + double proportion_which_die_if_bomb_drops_in_london = sample_beta(10.00, 2.45, seed); // 60% to 95% + + double probability_of_dying = laplace_probability_nuclear_exchange_next_year * + london_hit_conditional_on_russia_nuclear_weapon_usage * + informed_actor_not_able_to_escape * + proportion_which_die_if_bomb_drops_in_london; + return probability_of_dying; +} + +double probability_of_dying_eli(uint64_t* seed){ + double russia_nato_nuclear_exchange_in_next_month=sample_beta(1.30, 1182.99,seed); // .0001 to .003 + double london_hit_conditional = sample_beta(3.47, 8.97, seed); // 0.1 to 0.5 + double informed_actors_not_able_to_escape = sample_beta(2.73, 5.67, seed); // .1 to .6 + double proportion_which_die_if_bomb_drops_in_london = sample_beta(3.00, 1.46, seed); // 0.3 to 0.95; + + double probability_of_dying = russia_nato_nuclear_exchange_in_next_month*london_hit_conditional*informed_actors_not_able_to_escape*proportion_which_die_if_bomb_drops_in_london; + return probability_of_dying; + +} + +int main() +{ + // set randomness seed + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 + + + free(seed); +} diff --git a/examples/08_nuclear_war/makefile b/examples/08_nuclear_war/makefile new file mode 100644 index 0000000..ef385f7 --- /dev/null +++ b/examples/08_nuclear_war/makefile @@ -0,0 +1,53 @@ +# Interface: +# make +# make build +# make format +# make run + +# Compiler +CC=gcc +# CC=tcc # <= faster compilation + +# Main file +SRC=example.c ../../squiggle.c +OUTPUT=example + +## Dependencies +MATH=-lm + +## Flags +DEBUG= #'-g' +STANDARD=-std=c99 +WARNINGS=-Wall +OPTIMIZED=-O3 #-Ofast +# OPENMP=-fopenmp + +## Formatter +STYLE_BLUEPRINT=webkit +FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) + +## make build +build: $(SRC) + $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + +format: $(SRC) + $(FORMATTER) $(SRC) + +run: $(SRC) $(OUTPUT) + OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + +time-linux: + @echo "Requires /bin/time, found on GNU/Linux systems" && echo + + @echo "Running 100x and taking avg time $(OUTPUT)" + @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do $(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo + +## Profiling + +profile-linux: + echo "Requires perf, which depends on the kernel version, and might be in linux-tools package or similar" + echo "Must be run as sudo" + $(CC) $(SRC) $(MATH) -o $(OUTPUT) + sudo perf record ./$(OUTPUT) + sudo perf report + rm perf.data diff --git a/examples/08_nuclear_war/scratchpad/example b/examples/08_nuclear_war/scratchpad/example new file mode 100755 index 0000000000000000000000000000000000000000..1c3d4e3e54c7195d043a2c5e635120f410acfbff GIT binary patch literal 22280 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 literal 0 HcmV?d00001 diff --git a/examples/08_nuclear_war/scratchpad/example.c b/examples/08_nuclear_war/scratchpad/example.c new file mode 100644 index 0000000..3c3e45c --- /dev/null +++ b/examples/08_nuclear_war/scratchpad/example.c @@ -0,0 +1,20 @@ +#include "../../../squiggle.h" +#include +#include +#include + +int main() +{ + // set randomness seed + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 + double firstYearRussianNuclearWeapons = 1953; + double currentYear = 2023; + + for(int i=0; i<10; i++){ + double laplace_beta = sample_beta(currentYear-firstYearRussianNuclearWeapons + 1, 1, seed); + printf("%f\n", laplace_beta); + } + + free(seed); +} diff --git a/examples/08_nuclear_war/scratchpad/makefile b/examples/08_nuclear_war/scratchpad/makefile new file mode 100644 index 0000000..989c057 --- /dev/null +++ b/examples/08_nuclear_war/scratchpad/makefile @@ -0,0 +1,53 @@ +# Interface: +# make +# make build +# make format +# make run + +# Compiler +CC=gcc +# CC=tcc # <= faster compilation + +# Main file +SRC=example.c ../../../squiggle.c +OUTPUT=example + +## Dependencies +MATH=-lm + +## Flags +DEBUG= #'-g' +STANDARD=-std=c99 +WARNINGS=-Wall +OPTIMIZED=-O3 #-Ofast +# OPENMP=-fopenmp + +## Formatter +STYLE_BLUEPRINT=webkit +FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) + +## make build +build: $(SRC) + $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + +format: $(SRC) + $(FORMATTER) $(SRC) + +run: $(SRC) $(OUTPUT) + OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + +time-linux: + @echo "Requires /bin/time, found on GNU/Linux systems" && echo + + @echo "Running 100x and taking avg time $(OUTPUT)" + @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do $(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo + +## Profiling + +profile-linux: + echo "Requires perf, which depends on the kernel version, and might be in linux-tools package or similar" + echo "Must be run as sudo" + $(CC) $(SRC) $(MATH) -o $(OUTPUT) + sudo perf record ./$(OUTPUT) + sudo perf report + rm perf.data