Saya sedang mengerjakan game tempat Anda membuat berbagai item. Ada sumber daya yang terbatas, dan saya perlu menghitung waktu maksimum setiap item dapat dibuat berdasarkan apa yang tersedia. Saya memiliki semuanya bekerja kecuali bagian terakhir dari algoritma.

Pertama, bayangkan kita menghitung jumlah maksimal wortel yang bisa kita tanam. Ada beberapa langkah dalam resep menanam 1 wortel:

Wortel: Konsumsi 1 Air, Gunakan 1 Kavling Pertanian

Air: Gunakan 1 Ember, Gunakan 1 Kolam

Ember: Konsumsi 7 Kayu

Kavling Pertanian: Mengkonsumsi 2 Kayu, Mengkonsumsi 1 Tanah

Tanah: Gunakan 1 Sekop, Gunakan 1 Lubang Kotoran

Sekop: Konsumsi 2 Kayu

Jika ini tidak jelas: untuk menanam wortel, kami menambahkan seember air ke petak pertanian. Untuk mendapatkan air kami menggunakan ember di kolam. Setiap ember terbuat dari 7 buah kayu. Setiap petak pertanian terbuat dari dua potong kayu dan 1 tanah…. dll. Jika kita “mengkonsumsi” suatu barang, semua kegunaannya langsung habis. Namun, jika suatu item “digunakan”, item tersebut hanya kehilangan 1 penggunaan selama produksi. Misalnya, sebidang tanah dapat digunakan 4 kali untuk menanam wortel sebelum dimusnahkan. Katakanlah item memiliki kegunaan berikut:

Wortel: 1 kali pakai

Air: 1 kali pakai

Ember: 15 kegunaan

Plot Pertanian: 4 kegunaan

Tanah: 1 kali pakai

Sekop: 20 kegunaan

Kayu: 1 kali pakai

Jadi, di sinilah saya terjebak: perhatikan bahwa beberapa bagian dari resep membutuhkan kayu. Untuk lebih mudahnya, bayangkan saja ada 100 potong kayu yang bisa kita ambil. Saya perlu cara untuk menghitung berapa banyak kayu yang harus dialokasikan untuk setiap bagian dari resep. Saat ini, saya melakukannya seperti ini: (woodUsesInStep / totalWoodUses) * amountOfWood. Jadi, jika kita melihat berapa banyak kayu yang didapat ember itu adalah: (7 / 11) * 100 = ~64 potong kayu. Masalahnya adalah ini tidak akan menghasilkan jumlah wortel tertinggi….

Menggunakan algoritma ini, saya mendapatkan hasil ini:

Ember: 64 kayu dialokasikan, 9 ember dibuat

Sekop: 18 kayu dialokasikan, 9 sekop dibuat

Plot Pertanian: 18 kayu dialokasikan, 9 plot pertanian dibuat

Hasil Akhir: 36 wortel dapat dibuat

Tapi inilah hasil yang saya inginkan:

Ember: 49 kayu, 7 ember dibuat

Sekop: 4 Kayu, 2 sekop dibuat

Kavling Pertanian: 46 Kayu, 23 petak pertanian dibuat farm

Hasil Akhir: 92 wortel dapat dibuat

Entah bagaimana, saya perlu mengidentifikasi bagian mana dari resep yang menghasilkan hasil yang lebih tinggi dan mengalokasikan kayu berdasarkan itu, tetapi saat ini saya bingung bagaimana cara melakukannya.

-1
Michael 13 Maret 2020, 04:36

1 menjawab

Jawaban Terbaik

Seperti yang telah Anda temukan, rumus Anda saat ini menggunakan biaya setiap sumber daya ("bahan") dalam resep untuk menghitung cara membuat jumlah yang sama dari setiap bahan. (Anda dapat membuat 9 ember, 9 sekop, dan 9 petak pertanian dengan total 100 kayu.) Ini tidak memperhitungkan nilai setiap bahan, yaitu, (1) berapa banyak setiap bahan yang dibutuhkan oleh resep dan ( 2) berapa kali bahan tersebut dapat digunakan sebelum dikonsumsi.

Anda sudah menentukan ini dengan tangan, dan Anda mungkin mengikuti langkah-langkah yang mirip dengan berikut ini. Anda sudah tahu tiga bahan yang mengkonsumsi kayu adalah ember, sekop, dan petak pertanian. Untuk menentukan bagaimana mereka harus ditimbang dalam formula Anda, Anda perlu menentukan berapa banyak dari setiap bahan yang dikonsumsi untuk setiap wortel. Anda harus melakukan ini secara rekursif karena beberapa bahan dibuat menggunakan bahan lain.

Saat menghitung berapa banyak yang dibutuhkan, ingatlah bahwa beberapa bahan dapat digunakan berkali-kali, jadi Anda tidak boleh mengonsumsi seluruh bahan. Misalnya, jika Anda membutuhkan 1 ember tetapi ember tersebut memiliki 15 kegunaan, Anda sebenarnya menggunakan 1/15 ember. Jika pecahan ini membingungkan, pertimbangkan 100 wortel. Jika Anda perlu menggunakan ember 100 kali untuk 100 wortel dan ember dapat digunakan 15 kali sebelum dikonsumsi (maka Anda perlu membuat ember yang lebih baik!), Anda membutuhkan 100/15 ember, atau 6 2/3 ember. Ini sama dengan mengatakan setiap wortel menghabiskan 1/15 ember karena 1/15 * 100 = 6 2/3.

1 Carrot requires:
1 Water/1 use = 1 Water
1 Farm Plot/4 uses = 1/4 Farm Plot

*** First recursion ***

1 Water requires:
1 Bucket/15 uses = 1/15 Bucket
1 Pond (not applicable to this calculation)

1 Farm Plot requires:
2 Wood/1 use = 2 Wood
1 Soil/1 use = 1 Soil

*** Second recursion ***

1 Bucket requires:
7 Wood/1 use = 7 Wood

1 Soil requires:
1 Shovel/20 uses = 1/20 Shovel
1 Dirt Pit (not applicable to this calculation)

*** Unwinding the recursion ***

*** First recursion ***

1 Water requires:
1/15 Bucket

1 Farm Plot requires:
2 Wood
1 Soil -> 1/20 Shovel

*** Initial ***

1 Carrot requires:
1 Water -> 1/15 Bucket
1/4 Farm Plot -> 1 Farm Plot = {2 Wood + 1/20 Shovel} -> 1/4 * (2 Wood + 1/20 Shovel ) -> 1/2 Wood + 1/80 Shovel

Jadi 1 Wortel membutuhkan:

1/15 Bucket (1 Bucket = 7 Wood, so 1/15 Bucket = 7/15 Wood)
1/4 Farm Plot (1 Farm Plot = 2 Wood, so 1/4 Farm Plot = 2/4 or 1/2 Wood)
1/80 Shovel (1 Shovel = 2 Wood, so 1/80 Shovel = 1/40 Wood)

Sekarang mari kembali ke rumus awal Anda, yaitu woodUsesInStep / totalWoodUses * quantityOfWood. Untuk Bucket, Anda menggunakan nilai 7 untuk woodUsesInStep dan 11 untuk totalWoodUses, tetapi sekarang Anda dapat melihat bahwa woodUsesInStep sebenarnya adalah 7/15 untuk Bucket, 1/2 untuk Plot Pertanian, dan 1/40 untuk Shovel, yang berarti totalWoodUses adalah 119/120 (7/15 + 1/2 + 1/40).

Sekarang kita bisa menerapkan rumus:

Bucket: (7/15) / (119/120) * 100 = 47.1 Wood (makes 6.7 Buckets)
Farm Plot: (1/2) / (119/120) * 100 = 50.4 Wood (makes 25.2 Farm Plots *assuming you have enough Shovels!*)
Shovel: (1/40) / (119/120) * 100 = 2.5 Wood (makes 1.25 Shovels)

Seperti yang Anda lihat ketika Anda membandingkannya dengan hasil yang Anda harapkan, ini membuat Anda cukup dekat. Sebenarnya ini memberi Anda distribusi kayu yang benar dalam resep, tapi sayangnya ini hanya bagian pertama dari masalah. Karena Anda tidak dapat menghabiskan 2,5 Kayu atau membuat 1,25 sekop, Anda memerlukan cara untuk menentukan apakah akan membulatkan ke atas atau ke bawah untuk setiap bahan. Saya tidak memiliki formula yang tepat untuk bagian ini, tetapi saya yakin ini akan membuat Anda sangat dekat:

  1. Mulailah dengan bahan yang paling sedikit Anda buat. (Dalam hal ini, itu adalah Shovel).
  2. Bulatkan ke bilangan bulat terdekat dari bahan-bahan dan kurangi biaya dari total sumber daya yang tersedia. (Dalam hal ini Anda membulatkan 1,25 hingga 2 Sekop utuh dan mengurangi biaya 4 Kayu dari total 100 menyisakan 96 yang tersedia.
  3. Ulangi langkah-langkah ini untuk setiap bahan sampai Anda kehabisan sumber daya:
  4. Bahan berikutnya adalah Bucket karena Anda ingin membuat 6,7 dari mereka versus 25,2 Plot Pertanian.
  5. Bulatkan hingga 7 Bucket dan kurangi biaya 49 Kayu dari 96 Kayu yang tersisa, sisakan 47 kayu yang tersedia.
  6. Bahan berikutnya (dan terakhir) adalah Plot Pertanian. Anda ingin membulatkan 25,2 menjadi 26, tetapi Anda hanya memiliki sumber daya yang cukup untuk 23, jadi buatlah itu.

Hasil:

2 Shovels
7 Buckets
23 Farm Plots
92 Carrots, as expected

Keberhasilan!

1
Jeremiah Mercier 13 Maret 2020, 04:24