Tysta dueller—Konstruera lösningen del 1 || Math ∩ Programmering

Tysta dueller—Konstruera lösningen del 1 || Math ∩ Programmering


Tidigare inlägg i den här serien:

Tysta dueller och ett gammalt papper från Restrepo Tysta dueller – analysera konstruktionen

Förra gången vadade vi in ​​på Restrepos tysta duellpapper. Du kan se originalet och min omformaterade version på Github tillsammans med all kod i den här serien. Vi smälte avsnitt 2 och lite längre och ritade några förenklade exempel på den symmetriska versionen av spelet.

Jag erkänner att den här uppsatsen inte är lätt att läsa. Avsnitt 3-6 presenterar de centrala definitionerna, lemman och bevis. De är ett slag av tät notskrift utan vägledande intuition. Symbolerna får inte ens catchy namn eller “tänk på det här som” förklaringar! Jag tror att denna skillnad i kommunikation har något att göra med den period då uppsatsen skrevs, och något att göra med datorernas barndom vid den tiden. Tidningen publicerades 1957, vilket markerade året IBM bytte från vakuumrör till transistorer, långt innan Moores lag ens var en glimt i Gordon Moores ögon. Vi kan inte klandra Restrepo för att inte vädja till våra moderna känslor.

Jag tillbringade pinsamt mycket tid med att kämpa mig igenom avsnitt 3-6 när jag fortfarande inte riktigt förstod formen av den optimala strategin. Det är inte förrän i allra högsta grad avsluta av papperet (avsnitt 8, beviset för sats 1) att vi får en konstruktion. Se sista inlägget för en detaljerad beskrivning av den data som utgör den optimala strategin. I korthet är det en partition av $ (0,1)$ i delintervall $ (a_i, a_{i+1})$ med en sannolikhetsfördelning $ F_i$ på varje intervall, och tiden du tar din $ i$-th åtgärd väljs slumpmässigt enligt $ F_i$. Alternativt kan den sista fördelningen inkludera en poängmassa vid tiden $ t=1$, dvs “vänta till sista ögonblicket för en garanterad träff.”

Avsnitt 8 beskriver hur man väljer $ a_i$ och $ b_j$, med fördelningarna $ F_i$ och $ G_j$ byggda enligt formlerna som byggts upp i föregående avsnitt.

Eftersom vårt mål fortfarande är att förstå hur man konstruerar lösningen – även om varför det fungerar är fortfarande ett mysterium – vi kommer att skriva ett program som implementerar den här algoritmen i två inlägg. Först kommer vi att arbeta med ett förenklat symmetriskt spel, där svaret tillhandahålls för oss som ett testfall. I ett uppföljande inlägg kommer vi att omarbeta koden för att konstruera den generiska lösningen och välja nits om kodkvalitet, och de finare punkterna i algoritmen Restrepo utelämnar.

I slutändan, om det som programmet producerar stämmer överens med Restrepos exempel (i stället för att förstå tillräckligt mycket av tidningen för att konstruera vårt eget), kommer vi att utropa seger – vi har framgångsrikt förnuftskontrollerat Restrepos konstruktion. Sedan kan vi gå vidare till att studera varför den här lösningen fungerar och vilka förbehåll som döljer sig under matematiken.

Följ formlerna

Ingången till spelet är ett val av $ n$ åtgärder för spelare 1, $ m$ åtgärder för spelare 2, och sannolikhetsfördelningar $ P, Q$ för de två spelarnas framgångsannolikheter (respektive). Här är algoritmen som anges av Restrepo, med de refererade ekvationerna som följer. Om du följer med min “arbeta genom tidningen organiskt” shtick, rekommenderar jag att du försöker analysera texten nedan innan du läser vidare. Minns $ \alpha$ är sannolikheten “vänta tills slutet” för spelare 1:s sista åtgärd, och $ \beta$ är den analoga sannolikheten för spelare 2.

Tysta dueller—Konstruera lösningen del 1 || Math ∩ Programmering

Restrepos beskrivning av algoritmen för att beräkna den optimala strategin.

Ekvationerna som refereras till ovan

Ekvationerna som refereras till ovan

Låt oss reda ut den här röran.

Först den breda bilden. Hela konstruktionen beror på $ \alpha, \beta$, dessa poängmassor för spelarnas slutliga handlingar. Det finns dock detta villkor att $ \alpha \beta = 0$, dvs högst en kan vara lik noll. Detta ger en vagt intuitiv mening: en spelare med fler åtgärder kommer att ha extra “tillskott” och därför kan det vara vettigt för dem att vänta till slutet för att få en garanterad träff. Men bara en spelare kan ha en sådan fördel gentemot den andra, så bara en av de två parametrarna kan vara lik noll. Det är min informella motivering för $ \alpha \beta = 0$.

Om vi ​​inte vet $ \alpha, \beta$ i början, är Restrepos konstruktion (valet av $ a_i$s och $ b_j$s) en deterministisk funktion av $ \alpha, \beta$ och de andra fasta ingångarna.

$$\displaystyle (\alpha, \beta) \mapsto (a_1, \dots, a_n, b_1, \dots, b_m)$$

Konstruktionen hävdar att den optimala lösningen har $ a_1 = b_1$ och vi måste hitta en ingång $ (\alpha, \beta) \in (0,1) \times (0,1)$ så att $ \alpha \beta = 0$ och de producerar $ a_1 = b_1 = 1$ som utdata. Vi gör en sökning efter de “rätta” utdataparametrarna och använder kunskap om det kedjade sambandet mellan ekvationer för att titta på utdata, och använder det för att justera indata för att få utdata närmare det vi vill ha. Det är inte gradientnedstigning, men det skulle förmodligen kunna omformuleras på det sättet.

Tänk särskilt på fallet när vi får $ b_1 omvänd utdata, dvs kommer att göra $ a_1 mellanvärdessats från kalkyl, men till hitta det värdet det enklaste alternativet är binär sökning. Vi har de övre och nedre gränserna, $ \beta = 0$ och $ \beta = 1 – \varepsilon$, och vi vet när vi hittade vårt mål: när utgången har $ a_1 = b_1$.

Denna binära sökning kommer tillbaka i full gång i nästa inlägg, eftersom vi redan vet att den symmetriska tysta duellen börjar med $ a_1 = b_1$. Ingen sökning efter $ \alpha, \beta$ behövs, och vi kan fixa dem båda till noll för tillfället – eller snarare, anta att de rätta värdena är kända.

Det som återstår är att bestämma hur man beräknar $ a_i$ och $ b_j$ från en start $ \alpha, \beta$. Vi kommer att gå igenom algoritmen steg för steg med hjälp av det symmetriska spelet där $ P=Q$ (samma åtgärdsframgångsannolikhet) och $ n=m$ (samma åtgärdsantal) för att grunda vår studie. Ett uppföljningsinlägg kommer att se över dessa formler i full allmänhet.

Det symmetriska spelet

Grundidén med konstruktionen är att vi utgår från en beräkning av de sista handlingsparametrarna $ a_n, b_m$, och använder dem induktivt för att beräkna parametrarna för tidigare åtgärder via några integraler och substitutioner. Konstruktionen är med andra ord en rekursion, och intervallet i vilket spelarna gör sin sista åtgärd $ (a_n, 1), (b_m, 1)$ är basfallet. När jag började skriva programmen nedan, ville jag ge ett namn till dessa $ a_i, b_j$ värden. Restrepo verkar hänvisa till dem som “parametrar” i tidningen. Jag ringer dem övergångstidereftersom markera de ögonblick då en spelare “övergår” från ett åtgärdsintervall $ (a_2, a_3)$ till nästa $ (a_3, a_4)$.

För en enkel sannolikhetsfunktion $ P$ resulterar slutet av algoritmen i ekvationer som liknar: välj $ a_t$ så att $ P(a_{nt}) = 1/(2t + 3)$.

Kom ihåg att spelare 1 har en speciell funktion som används i varje steg för att konstruera sin optimala strategi, kallad $ f^*$ av Restrepo. Det definieras för icke-symmetriskt spel enligt följande, där återkallelse $ Q$ är motståndarens handlingssannolikhet:

$$\displaystyle f^*

def f_star(prob_fun, prob_fun_var, larger_transition_times):
”’Compute f* as in Restrepo ’57.

In this implementation, we’re working in the simplified example
where P = Q (both players probabilities of success are the same).
”’
x = prob_fun_var
P = prob_fun

product = 1
for a in larger_transition_times:
product *= (1 P(a))

return product * diff(P(x), x) / P(x)**3

I denna symmetriska instans av problemet vet vi redan att $ \alpha = \beta = 0$ är den optimala lösningen (Restrepo anger det i avsnitt 2), så vi kan fixa $ \alpha=0$, och beräkna $ a_n$, vilket vi gör härnäst.

I tidningen säger Restrepo “beräkna utan parametrar i definitionen av $ f^*$” och det här menar jag, eftersom det inte finns några större åtgärdsögonblick, är produkten $ \prod_{b_j > t}1-P(b_j)$ tom, dvs. vi skickar en tom lista med larger_transition_times. Restrepo bryter mot detta genom att ibland hänvisa till $ a_{n+1} = 1$ och $ b_{m+1} = 1$, men om vi inkluderade någon av dessa $ P(a_{n+1}) = P(1) = 0$, och detta skulle göra definitionen av $ f^*$ noll, vilket skulle ge en icke-fördelning, så det kan inte vara rätt. Detta är ett av de fall där man, när man läser en matematikuppsats, måste sluta sig till den tolkning som är mest förnuftig och ge författaren fördelen av tvivel.

Att följa resten av ekvationerna är trivialt, förutom att vi löser för $ a_n$ som är en gräns för integration. Eftersom SciPy fungerar symboliskt kan vi dock helt enkelt säga åt det att integrera utan att berätta för det $ a_n$, och be det lösa för $ a_n$.

from sympy import Integral
from sympy import Symbol
from sympy.solvers import solve
from sympy.functions.elementary.miscellaneous import Max

def compute_a_n(prob_fun, alpha=0):
    P = prob_fun
    t = Symbol('t0', positive=True)
    a_n = Symbol('a_n', positive=True)

    a_n_integral = Integral(
        ((1 + alpha) - (1 - alpha) * P
    a_n_integrated = a_n_integral.doit()   # yes now "do it"
    P_a_n_solutions = solve(a_n_integrated - 2 * (1 - alpha), P(a_n))
    P_a_n = Max(*P_a_n_solutions)
    print("P(a_n) = %s" % P_a_n)

    a_n_solutions = solve(P(a_n) - P_a_n, a_n)
    a_n_solutions_in_range = (soln for soln in a_n_solutions if 0  soln  1)
    assert len(a_n_solutions_in_range) == 1
    a_n = a_n_solutions_in_range(0)
    print("a_n = %s" % a_n)

    h_n_integral = Integral(f_star(P, t, ()), (t, a_n, 1))
    h_n_integrated = h_n_integral.doit()
    h_n = (1 - alpha) / h_n_integrated
    print("h_n = %s" % h_n)

    return (a_n, h_n)

Det finns tre faser här. Först integrerar vi och löser $ a_n$ (blint enligt ekvation 27 i tidningen). Om du räknar ut denna integral för hand (expanderar $ f^*$), kommer du att märka att den ser ut som $ P’

def compute_as_and_bs(prob_fun, n, alpha=0):
”’Compute the a’s and b’s for the symmetric silent duel.”’
P = prob_fun
t = Symbol(‘t0’, positive=True)

a_n, h_n = compute_a_n(prob_fun, alpha=alpha)

normalizing_constants = deque((h_n))
transitions = deque((a_n))
f_star_products = deque((1, 1 P(a_n)))

for step in range(n):
# prepending new a’s and h’s to the front of the list
last_a = transitions(0)
last_h = normalizing_constants(0)
next_a = Symbol(‘a’, positive=True)

next_a_integral = Integral(
(1 P
next_a_integrated = next_a_integral.doit()
# print(“%s” % next_a_integrated)
P_next_a_solutions = solve(next_a_integrated 1 / last_h, P(next_a))
print(“P(a_{n-%d}) is one of %s % (step + 1, P_next_a_solutions))
P_next_a = Max(*P_next_a_solutions)

next_a_solutions = solve(P(next_a) P_next_a, next_a)
next_a_solutions_in_range = (
soln for soln in next_a_solutions if 0 soln 1)
assert len(next_a_solutions_in_range) == 1
next_a_soln = next_a_solutions_in_range(0)
print(“a_{n-%d} = %s % (step + 1, next_a_soln))

next_h_integral = Integral(
f_star(P, t, transitions), (t, next_a_soln, last_a))
next_h = 1 / next_h_integral.doit()
print(“h_{n-%d} = %s % (step + 1, next_h))

print(“dF_{n-%d} coeff = %s % (step + 1, next_h * f_star_products(1)))

f_star_products.append(f_star_products(1) * (1 P_next_a))
transitions.appendleft(next_a_soln)
normalizing_constants.appendleft(next_h)

return transitions

Slutligen kan vi köra den med enklast möjliga sannolikhetsfunktion: $ P
compute_as_and_bs(Lambda((x,), x), 3)

Utgången är

P(a_n) = 1/3
a_n = 1/3
h_n = 1/4
P(a_{n-1}) is one of (1/5)
a_{n-1} = 1/5
h_{n-1} = 3/16
dF_{n-1} coeff = 1/8
P(a_{n-2}) is one of (1/7)
a_{n-2} = 1/7
h_{n-2} = 5/32
dF_{n-2} coeff = 1/12
P(a_{n-3}) is one of (1/9)
a_{n-3} = 1/9
h_{n-3} = 35/256
dF_{n-3} coeff = 1/16

This matches up so far with Restrepo’s example, since $ P(a_{n-k}) = a_{n-k} = 1/(2k+3)$ gives $ 1/3, 1/5, 1/7, 1/9, \dots$. Since we have the normalizing constants $ h_i$, we can also verify the probability distribution for each action aligns with Restrepo’s example. The constant in the point mass function is supposed to be $ h_i \prod_{j={i+1}}^n (1-P(a_j))$. This is what I printed out as dF_{n-k}. I Restrepos exempel förväntas detta vara $ \frac{1}{4(k+1)}$, vilket är exakt vad som skrivs ut.

Ett annat exempel med $ P



Source link

Postagens Similares

  • 尼古湖麗思卡爾頓酒店 RAYA 晚餐

    RAYA 是理查德·桑多瓦爾 (Richard Sandoval) 的概念餐廳,提供泛拉丁沿海美食,採用可持續海鮮、當地農產品、天然有機肉類以及主廚桑多瓦爾 (Sandoval) 的招牌拉丁風味烹製而成。 2011 年,RAYA 被里維埃拉奧蘭治縣評為“年度最佳餐廳”。 RAYA 位於南奧蘭治縣的麗思卡爾頓酒店內。房間美麗、豪華、獨特。天氣好的時候,露台是更好的選擇,但餐廳內仍然可以欣賞到大海的全景。 菜單分為三個部分:共享、小盤、沙拉和湯以及特色菜。我們沒有選擇湯或沙拉,因為這些產品看起來並不那麼有趣。相反,我們專注於餐廳特色菜,從和牛韃靼牛肉開始。 和牛代表日本牛,但我非常懷疑牛肉來自日本。還是很嫩的,只是不是A5級別的。這道菜是在桌邊準備的,使用黑蒜蒜泥蛋黃醬、可尼雞、醃製蛋黃、醃芥末籽、綠橄欖醬和烤佛卡夏麵包。 我不知道為什麼這道菜是在桌邊做的。這不是什麼表演。他們可以輕鬆地在廚房準備好並帶到餐桌上,您不會錯過任何東西。 烤花椰菜配花生瓜吉洛醬和煙熏葡萄chimichurri。這是一道奇怪的菜。取整個花椰菜頭,但不要切碎。相反,將整個東西放在烤箱中烘烤,直到外面形成一層外殼,然後將其隱藏在醬汁中。奇怪但很好。 用蝦、珍寶蟹和龍蝦製成的海鮮玉米捲餅。塗上奶油瓜吉略醬,搭配傳家寶櫻桃番茄。我吃過的最好吃的辣醬玉米餅餡之一。這也是我吃過的最貴的玉米捲餅。 上面這道菜叫 Mariscos A Lo Macho,是秘魯傳統的海鮮醬,味道鮮美、爽口、香濃、微辣。它幾乎可以與任何海鮮搭配。在這種情況下,RAYA將醬汁與鱸魚、虎蝦和小頸貽貝搭配。尤卡、番茄和莎莎醬構成了這道菜。 奶油玉米醬上的扇貝和五花肉。配料都放在盤子的一側,讓我想知道另一側是否應該有什麼東西。扇貝和五花肉都非常嫩。 RAYA 的菜單上有四種甜點,我們決定品嚐其中兩種:桃子奶油凍糕和檸檬蛋糕。兩者都非常好,也是結束這頓飯的好方法。 四個人的晚餐每人100美元多一點,對於一家高級餐廳來說這個價格相當合理。如果您入住尼古湖麗思卡爾頓酒店(實際上位於達納角),那麼在 RAYA 享用晚餐應該成為您行程的一部分。 Source link

  • アメリカのズボン:ダラスカウボーイズのズボンの特別な調査

    おはよう、ユニウォッチャー。すべての人に幸せなこぶの日。そして、観察しているすべての人に、新年あけましておめでとうございます! 私は最近読者から連絡を受けました ドン・パターソン「レジェンドはカウボーイズスターブルーが車のインテリアに触発されたテックスシュラムが気に入った車に触発されました。これの決定的な証拠はなく、機器マネージャーからの引用だけがあり、彼は車を知りませんでした。私もこの話を聞いていたので、ドンが彼の深いダイビングをしたとき、私はそれがユニウォッチに最適であることを知っていました。 したがって、これ以上苦労することなく、「青い」ズボンと数十年にわたって受けた変化する色合いのドンの調査を提示することができます。 楽しむ! ••••• 1986年にダラスカウボーイズのゼネラルマネージャーのテックスシュラム アメリカのズボン:ダラスカウボーイズのズボンの特別な調査ドン・パターソンによって 彼らの65年の存在の中で、ダラスカウボーイズは、フィールドだけでなく、スタイルの選択において、一貫して一貫性がありませんでした。アメリカのチームのカラーパレットは、統合失調症で有名で、青の2つの色合いを誇っています 三つ 銀の色合い。これらのいわゆるシルバーの1つは、実際には「カウボーイズスターブルー」です。これは、カウボーイズの伝統的なホームホワイトと組み合わせたパンツでのみ使用されるユニークなメタリックシルバーブルーです。 「カウボーイスターブルー」は、実際のカウボーイスターで使用されている青と混同しないでください。 その通り、 ネイビーブルー。 Team Loreによると、この特別な銀の色合いは、カウボーイズの元社長兼ゼネラルマネージャーであるTex Schrammによって作成されました。チームの長年の機器ディレクターであるマイク・マッコードは、Fox Sportsの2017年のインタビューで色の起源を説明しました。 「カウボーイズスターブルー」は、現在、ホームホワイトジャージで見られるズボンであり、実際にはテックスシュラムで生まれました。どうやら、彼は彼が見た車を持っていたようです – 彼が車を所有しているのか、それを見たのかどうかはわかりませんが、彼はその色の内部の車を見て、それに恋をしました。だから私たちは染料がたくさんありました。その生地は染料の色であるため、その染料のロットでそれを生産するために一定数のヤードを注文する必要があります。そのため、そのパンツ色はホームゲームのカウボーイの色になりました。 このストーリーのバージョンは何年もの間、都市の伝説と掲示板の飼料として広まりましたが、元のソースに最も近いものは2017年からのマッコードの引用のようです。マッコードは1989年からチームに所属しており、主要なものではありませんが、プライマリではありません。 Schramm時代からの記事やインタビューは、車のインテリアの起源の物語について言及しておらず、このテーマに関するSchrammからの直接的な引用は存在することが知られていません。そして、Netflixシリーズで使用されている8時間近くのインタビューとアーカイブ映像で アメリカのチーム:ギャンブラーと彼のカウボーイ、 彼らはズボンについてまったく話しませんでした。 一度も。 徹底的な検索の後、この作家は、車の中のシュラムの写真でさえ、物語の具体的な証拠を発掘することに失敗しました。マッコードの物語を額面通りにとらえて、私たちはまだそれがどんな車だったのか疑問に思うようにされています。それで、まさにそれをしましょう。どの車がシュラムにダラスカウボーイズの歴史を永遠に変えるように促したかについて激しく推測しましょう。 色 カウボーイズは1960年に青と白のチームとして人生を始めました。シルバーが写真に入ったのは1964年までではありませんでした。それ以来、基本的な外観は同じままですが、詳細は大きく異なります。当初、シルバーとブルースは完全に調和して生きていましたが、70年代半ばには、色相がわがままなドリフトを始めました。 1974年、「カウボーイスターブルー」パンツへの移行が完全に進行中でした。 左:1968年のクレイグ・モートン。右:1980年のエド「背が高い」ジョーンズ 新しい色はPantone 8200 Cとして始まりましたが、染料と生地の変化により長年にわたって変化しました。グリーンは後に銀に加えられたので、古いテレビでよりよく輝くことができました。シェードは、スタイルガイドのシルバーグリーン(パントン8280 C)として定義されていました。 1980年代までに、シュラムは彼自身の発明にうんざりしており、少なくとも部分的に変化を起こすことにしました。長い間不運と見なされる青い離れたユニフォームは見直されました。ブルージャージはロイヤルからネイビーブルーに行き、ズボンは「カウボーイズスターブルー」をシニエ、トゥーアーシルバーのために捨てました。プレイヤーの反応は混ざり合っていました。 「カウボーイズスターブルー」は、伝統的な白いユニフォームのために立ち往生しました。しかし、テレビが2000年代に高解像度にジャンプしたとき、ファンはついに彼らが本当にそうであったように海の泡のズボンを見ました。 2020年、ズボンは再び変わり、今回は現在の明るい青になり、真の「カウボーイスターブルー」に完全な円に戻りました。 左:1999年にエミットスミス。右:2025年の一部の人 車 Tex Schrammに影響を与えた正確な車は歴史に失われる可能性がありますが、いくつかの可能性のあるパラメーターに基づいてモデルで教育を受けた推測をすることができます。 まず、1974年の「Cowboys Star Blue」の元の外観を、自動車インテリアとの比較の基礎として使用します。 1974年のシーズンの下の写真に見られるように、色は太陽の下で最高です。 キャプテンアメリカ、1974年 次に、車の検索の周りにガードレールをいくつか設定し、最も現実的な候補者を残します。 時間枠:この車は、1960年代後半または1970年代初頭のモデルである可能性があります。 Schrammは、1974年のシーズンに間に合うようにズボンが生産準備が整っているのに間に合うように車を見なければなりませんでした。つまり、1973年のモデルが最新の可能性です。シルバーが1964年に最初に追加されたときに色が採用されていないため、1964年以降にさかのぼる車が想定されます。初めて見られた古い車がインスピレーションであった可能性がありますが、シュラムの目を引いた新しい斬新なインテリアであると思います。 量産:また、問題の車がカスタムジョブではなかったと仮定します。時代のユニークでカスタマイズされたインテリアをピン留めしようとすることはほぼ不可能なので、検索を工場のインテリアオプションに制限します。 アメリカ:シュラムは間違いなくダラスでフェラリスやメルセデスの彼のシェアを見ましたが、私たちは話しています アメリカのチーム 質問されていないアメリカの自動車の優位性の時点で、私たちはビッグ3(フォード/GM/クライスラー)に固執します。 基本ルールが設定されていると、Big…

  • எனது 2023 புதிய மேக் அமைப்பு

    எனது புதிய மேக்புக் ஏர் (13 இன்ச், 2023 எம்2 16 ஜிபி ரேம் 1டிபி எச்டி) இன்று அமைத்தேன். மேக்கில் நான் பயன்படுத்தும் அனைத்தும் இதோ. இந்த இடுகையின் முந்தைய பதிப்புகள்: 2018-2020 முதல் மற்றொன்று 2021 முதல் மற்றொன்று 2022 வரை. எதிர்காலத்தில் இந்த இடுகையைப் புதுப்பித்தால், இந்த உள்ளடக்கங்கள் காப்பகப்படுத்தப்படும், ஆனால் இந்த URL அப்படியே இருக்கும். டோமோவின் ஜப்பானிய போட்காஸ்டில் மூடப்பட்டிருக்கும்! நண்பர்களிடமிருந்து பட்டியல்கள் மற்றும் பிற Mac அமைவு கருவிகளுக்கு…

  • Следуя алгоритму | Дэниел Мисслер

    У меня только что было странное предчувствие, что в 2026 году мы получим результаты, подобные ASI, от ИИ, но не от новой модели. Это будет из петель. И, возможно, в частности, один цикл, который я иногда называю Последним алгоритмом или Основополагающим алгоритмом. Что-то крутое. Алгоритм заслуживает крутого слова. Мне кажется, что если мы столкнемся с…

  • 飛行機への恐怖 – Kev Quirk

    2026 年 5 月 1 日 私は最近ネイサン・ミルワード著『ロング・ライド・ホーム』を読んでいたのですが、その本の中で彼は飛行機に乗らなければならないことと飛行機への恐怖について次のように語っています。 これは私が避けたかったこと(飛行機に乗るということ)であり、私の飛行機への恐怖は、上空での制御の欠如から生じたものである(と私は思います)。 すべては他人の手に委ねられています。何も悪いことが起こらないことを祈りながら、ただそこに座っていてください。なぜなら、もしそうなったとしても、人生でやるべきこと、やるべきことのすべてを考えている自由落下の瞬間より悪いことは考えられません。物事を正したり、間違いから学ぶにはもう手遅れだからです。あなたの時代がやって来ました、そして今はもう終わりです。これは飛ぶことと同じくらい、後悔することへの恐怖なのだと思いますが。 — ネイサン・ミルワード これ 本当に 仕事で半定期的に飛行機に乗る人にとって、飛行機が怖いと話すと、人々はよく驚かれます。 分からない、多分 恐れ 強すぎる言葉ですが、確かにとても不快な気持ちになります。特に乱気流がある場合。 ネイサンと同じように、それはコントロールの喪失だと思います。はい、そうです、私はバイクに乗っているときや自動車事故で怪我をする可能性がはるかに高いです。しかし、違うのは、車や自転車で事故に遭ったとしても、私はある程度コントロールできており、(特に車の場合)軽い怪我だけで済んでしまう可能性がかなりあるということです。 一方、飛行機事故に遭った場合、私は とても 可能な限り最も恐ろしい方法で死ぬ可能性が高く、それは私を完全に恐怖させます。私の旅行の多くが大西洋を横断するため、広大な水域を越えることが、この状況をさらに悪化させることがよくあります。素晴らしい。 それを克服するには? 神は私が試したことを知っています!私はブリティッシュ・エアウェイズで自信を持って飛ぶコースを受講したことがあり、知識は増えましたが、不安はあまり解消されませんでした。 睡眠薬を試したこともありますが、イギリスで市販されているものはどれもクソで、私にはまったく効果がありません。眠くなることもありません。何人かの人が鎮静剤を勧めましたが、それは私には不快です。それは違法であるだけでなく、彼らが私に何をするのかわかりません。結構です。 私は不安を抱えた飛行家になる運命にあると思うので、ただそれに対処しなければなりません。 数週間後にまたアメリカに行く予定ですが、いつものように不安が私の腹の中で湧き上がり始めています。 ヒントをお持ちの方がいらっしゃいましたら、ぜひお聞かせください。 意見 メールで返信 もっと購読してください! 私の最新のワッフルを読むために何度もここに来る必要はありません。新しいコンテンツを公開するたびに更新情報を受信できるように購読する方法が 2 つあります。 Source link

  • 世代を形作ったコードの保存: Zork I、II、III のオープンソース化

    現在、私たちは、私たちの心に近い、大切なゲームの歴史の基礎を保存しています。 Microsoft の Open Source Programs Office (OSPO)、​​Team Xbox、Activision が協力して、 ゾークI、 ゾーク II、 そして ゾークIII MIT ライセンスに基づいて利用可能です。私たちの目標はシンプルです。歴史的に重要なコードを生徒、教師、開発者の手に渡し、彼らがコードを研究し、そこから学び、そしておそらく最も重要なことに、コードを再生できるようにすることです。 遊びに対する考え方を変えたゲーム いつ ゾーク 登場したのは、プレイヤーに勝つことを求めるだけではありませんでした。それは彼らに想像してもらいました。グラフィックス、ジョイスティック、サウンドトラックはなく、画面上の文字とプレイヤーの好奇心だけがありました。しかし、これらの言葉は、当時のほとんどのゲームよりも鮮やかな世界を構築しました。それを可能にしたのは、単に巧みな文章を書いただけではなく、巧みなエンジニアリングでした。 その言葉の世界の下には、静かに革命的なものが存在していました。それは、カスタムビルドのエンジンである Z-Machine です。 Z-Machine は仮想マシンの仕様であり、現在私たちが使用している多くの Z-Machine インタプリタは、その VM のソフトウェア実装です。オリジナルのメインフレーム バージョン ゾーク 初期の家庭用コンピュータでは処理できないほど大きすぎたため、Infocom のチームは現実的な選択を行いました。彼らはそれを 3 つのゲームに分割し、 ゾークI、 ゾーク II、 そして ゾークIII、すべて同じ基盤システムによって動作します。これは、プラットフォームごとにゲームを再構築する代わりに、Z-Machine を使用して同じストーリー ファイルをどのコンピュータでも解釈できることも意味しました。あのデザインが作ったのは ゾーク 真のクロスプラットフォームとなった最初のゲームの 1 つであり、Apple II、IBM PC などで登場します。 歴史の一部を保存する ゲームの保存にはさまざまな形があり、遊びだけでなく研究も考慮することが重要です。 Zork のソース コードは保存して研究する価値があります。私たちは新しいリポジトリを作成するのではなく、歴史に直接貢献しています。…

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *