Ini adalah cerita tentang pengkodean, penganggaran, perselisihan keuangan, dan D&D.

Sebuah Pengantar

Halo!

Saya seorang pengembang web lepas. Cukup baru dalam permainan ini.

Meskipun, seperti kebanyakan orang, saya adalah dan telah menjadi lebih dari itu ⸺ penjual keju, musisi tur, guru sekolah menengah, serta, saya yakin, hal-hal yang tidak ada hubungannya dengan mendefinisikan diri saya semata-mata karena pekerjaan dan potensi menghasilkan uang.

Saya cukup yakin.

Yang paling penting untuk tujuan cerita ini: Saya Doc, seorang Penyihir Gnomish dengan latar belakang yang lebih lengkap daripada yang biasanya saya akui.

Setiap Kamis malam, saya dan beberapa sepupu berkumpul di Discord dan melanjutkan kampanye D&D 5e kami. Kelompok kami terdiri dari: penyair Setengah Elf, Biksu Bajak Laut Manusia, Penjahat Kurcaci, Paladin Kelahiran Naga, dan, tentu saja, saya sendiri.

Ruang Bawah Tanah & Deskripsi

Jika Anda tahu D&D, Anda mengetahuinya dan, untungnya, Anda akan mengikutinya. Yang lainnya, aku minta maaf. Tapi saya yakin Anda sudah memahami dasarnya. Jika Anda pernah memainkan Skyrim atau menonton Lord of the Rings, Anda memiliki inti dasarnya. Sekelompok orang dalam latar abad pertengahan menggunakan kekuatan menakjubkan untuk menaklukkan kejahatan. Hal-hal dasar.

Kelompok kami kebetulan memiliki sebuah Tavern di kota Waterdeep. Mekanisme permainan ini memungkinkan pemain yang memiliki kedai untuk menjalankan kedai tersebut sendiri, menjual bir dan minuman beralkohol, camilan, dan makanan. Namun, seperti di dunia nyata, hal ini membutuhkan pekerja, dan para pekerja tersebut memerlukan upah dan material untuk layanannya. Jadi, untuk setiap siklus mingguan 10 hari, kedai akan menjalankan perusahaan dengan biaya operasional dan memberikan sejumlah keuntungan kepada pemain berdasarkan beberapa pelemparan dadu. Pemain diperbolehkan menambahkan emas dalam jumlah berapa pun ke anggaran pemasaran yang akan mengubah formula keuntungan akhirnya.

Masalah

Setelah dua minggu, saya melihat kelompok saya, tanpa berdiskusi atau memikirkannya, sampai pada kesimpulan yang tidak terlalu masuk akal tentang anggaran pemasaran:lebih banyak emas yang ditambahkan ke pemasaran === lebih banyak emas yang diterima setelah minggu itu pada akhirnya, ERGO menambahkan emas terbanyak ke dalam pemasaran akan menghasilkan keuntungan emas terbanyak!

Sejujurnya pada awalnya saya tidak cukup peduli untuk mencoba meyakinkan mereka sebaliknya. Jika mereka ingin membuang 15-20gp setiap minggunya, itu adalah hak prerogratif mereka. Tapi aku seorang penyihir, sialan: mempelajari mantra tidaklah murah. Saya berhemat dan menabung untuk membeli kuali, mutiara, bulu burung hantu, dan keripik mika. Sial, bahkan menuliskan mantranya sendiri memaksaku untuk mengeluarkan 50gp per mantra. Emas adalah sumber daya berharga bagi para penyihir. Jadi saya diam-diam membiarkan mereka membelanjakan uangnya, menyimpan pendapat saya (dan sebagian besar emas saya) untuk diri saya sendiri.

Dan kemudian mereka mulai mempermalukan kekikiran saya.

Sekarang, inilah kami: sekelompok Yahudi Amerika yang kutu buku. Di internet. Dengan perbedaan pendapat mengenai suatu keputusan keuangan. Di dunia fiksi tanpa konsekuensi di dunia nyata.

Jelas yang terjadi selanjutnya adalah perasaan bersalah keluarga yang memanas, meski bersahabat, hingga mempermalukan saya agar menyetujui pilihan keuangan mereka yang buruk. Saya dengan tenang mencoba menjelaskan mengapa saya merasa alasan mereka didasarkan pada beberapa asumsi yang cukup goyah, tapi…

Segera menjadi jelas bahwa mereka tidak mau mendengarkan.

Jadi, seperti seorang penyihir gnomish yang rajin, saya menghela nafas jengkel dan mempersiapkan diri untuk menggunakan Mpernyataan A yang That Hsecara harmonis Smeluaskan alam semesta untuk menunjukkan kepada mereka ketidaktahuan akan cara mereka.

Menulis yang Salah

Sementara kelompokku melanjutkan perjalanan melalui selokan untuk mencari petunjuk untuk plot terbaru yang berdekatan dengan ahli nujum melawan kota, aku membuka VS Code, secara efektif mengatur status mentalku ke AFK sejauh menyangkut misi, dan mulai dengan pelemparan dadu. .

Untuk menentukan laba bersih 10 hari kami, saya memerlukan sejumlah lemparan dadu. Pada awalnya, saya telah menentukan setiap dadu. Saya kemudian menyadari bahwa, tanpa banyak penggunaan kembali, membuat fungsi yang mensimulasikan gulungan berdasarkan jumlah sisi sudah mencukupi.

Langkah selanjutnya adalah membaca Buku Pegangan Pemain untuk mendapatkan rumus yang saya perlukan: (1) nilai acak, (2) pendapatan kotor yang dapat dihasilkan oleh nilai tersebut, dan (3) pendapatan bersih berdasarkan anggaran pemasaran. Nilainya sendiri cukup mudah didapat: dadu bersisi 100, ditambah 10, lalu ditambah anggaran pemasaran. Mendapatkan pendapatan kotor meskipun melibatkan penentuan skenario yang mungkin dari nilai tersebut.

Pendapatan kotor ditentukan oleh daftar nilai tersebut: bila nilainya kurang dari 21, pengembaliannya adalah -90gp; ketika nilainya dari 21 hingga 30, pengembaliannya adalah -60gp, dll. Karena saya secara estetika tidak suka melihat sekumpulan (scenario > 20 && scenario < 31), saya mempersingkatnya sedikit. Saya mengambil nilainya ( misalnya 20), mengurangi 1 untuk mengatasi fakta menjengkelkan bahwa skenario tidak diindeks nol ke tempat puluhan ( misalnya 20 - 1 = 19 ), dikalikan dengan 0,1 ( mis. 19 * 0.1 = 1.9), dan dipotong untuk mengisolasi nilai puluhan yang diinginkan ( mis. 1.9 terpotong menjadi 1, maka skenarionya adalah 1, yang kurang dari 2, yang mengembalikan -90).

Dengan itu, saya dapat menemukan nilai akhir dengan lebih sedikit operator logika. Murni keputusan estetis.

Dengan pendapatan kotor tersebut, saya bisa mendapatkan keuntungan bersih dengan mudah dengan mengurangkan berapa pun pengeluaran yang digunakan untuk anggaran pemasaran.

Setelah semua fungsi pembantu saya ditentukan, sekarang saatnya untuk mengatasi masalah secara langsung.

Laissez les Bons Dés Rouler!

Saya ingin ukuran sampel yang besar untuk mendapatkan hasil yang akurat, jadi saya memutuskan untuk menjalankan satu juta uji coba per skenario anggaran.

Saya mulai dengan membuat array dengan panjang 91, dan menganggap ini adalah cara cepat untuk mewakili anggaran pemasaran. Dimulai dari awal array, setiap indeks dapat mewakili anggaran pemasaran, yaitu arr[0] akan menjadi skenario dengan anggaran pemasaran adalah 0, arr[1] memiliki anggaran pemasaran sebesar 1, … hingga anggaran 90gp untuk arr[90]. Oleh karena itu, setiap indeks akan berisi jumlah gabungan setiap percobaan untuk setiap juta percobaan

Selanjutnya, saya menyiapkan for-loop untuk menjalankan jutaan siklus. Untuk setiap siklus, saya mengulangi serangkaian uji coba. Untuk setiap uji coba, saya mendapatkan pendapatan bersih untuk anggaran tertentu dan menambahkannya ke uji coba tersebut.

Sebagai catatan tambahan, kompleksitas waktu tampaknya adalah O(n1 * n2), dengan n1 adalah panjang sample_size dan n2 adalah trial_sums panjang. Pada akhirnya, saya percaya ini adalah kompleksitas waktu yang efektif dari algoritma ini karena satu-satunya faktor signifikan lainnya adalah penambahan satu iterasi n2, yang berarti kompleksitas waktu O((n1 * n2) + n2). Dari pemahaman saya, ketika panjang sample_size (n1) mendekati tak terhingga, penambahan satu loop n2 lagi tidak ada artinya bagi (n1 * n2), jadi diabaikan.

Menemukan Maks

Bagian terakhir dari algoritme ini adalah mengambil penjumlahan uji coba tersebut dan mendapatkan rata-rata dengan membagi jumlah tersebut dengan ukuran sampel jutaan uji coba. Terakhir, demi kenyamanan, saya menetapkan nilai rata-rata menjadi dua angka desimal dan membandingkannya dengan laba atas investasi maksimal saat ini, max_roi. Kalau lebih besar dari max saat ini ya... baru diganti dan indeksnya disimpan sebagai anggaran.

Kesimpulannya

Setelah menjalankan lebih dari jutaan uji coba, saya menemukan anggaran pemasaran yang paling optimal. Dengan laba bersih rata-rata ~19.2gp, total investasi 30gp setiap siklus mingguan adalah yang terbaik. Dibandingkan dengan masing-masing 20gp yang sangat besar, kontribusi per anggota sebesar 6gp akan menghasilkan hasil yang lebih besar.

Saya menunggu sampai akhir sesi kami (saya bukan orang yang benar-benar mengalami kemunduran sosial: saya tidak akan mengganggu permainan peran orang lain) dan dengan bangga membagikan hasil saya, menunjukkan kepada mereka kebodohan logika mereka, yang menghasilkan laba bersih rata-rata 5,62 gp, dibandingkan dengan kesempurnaan saya.

Mereka… tidak bersyukur seperti yang saya kira.

Ternyata, saya mungkin tidak tertahankan.

Github Intisari untuk kode lengkap.

Awalnya diterbitkan di https://sisypheaninsights.com pada 8 Januari 2023.