ผลตอบแทน Diminishing แบบเรียบง่ายพร้อมหมวก


19

ปัญหา

ผู้เล่นได้รับ 5 คะแนนต่อระดับจนถึงระดับ 80 สูงสุด 400 มีสถิติ 5 รายการที่จะแจกจ่ายและไม่ จำกัด จำนวนสูงสุดที่คุณสามารถเพิ่มในสถิติได้

  • ความแข็งแรง
  • ความอดทน
  • สติปัญญา
  • ความว่องไว
  • โชค - ให้โอกาสสำคัญและสร้างความเสียหายอย่างรุนแรง

ฉันต้องการที่จะใช้สมการผลตอบแทนลดลงในสมมติว่าโชค สำหรับโอกาสที่สำคัญฉันไม่ต้องการให้ผู้เล่นสามารถตีโอกาสที่สำคัญได้ 100%

จะมีเพดานที่จะไปถึงเมื่อการเจริญเติบโตลดลงมากขึ้นถึง 0 ต่อจุดเพิ่ม

ตัวอย่างถ้าโอกาสวิกฤติสำคัญที่สุดที่ฉันต้องการให้ผู้เล่นมีคือ 40% แต่ละจุดเข้าสู่โชคจะเพิ่มโอกาสวิกฤตน้อยลงเรื่อย ๆ จนกว่าโอกาสวิกฤติจะถึงประมาณ 40% โดยที่ 1 โชคจะให้จำนวนเงินที่น้อยมาก

ทางออกใด ๆ ? ขอขอบคุณและความช่วยเหลือของคุณได้รับการชื่นชมอย่างมาก!


เป็นไปได้ที่ซ้ำกันของวิธีการพัฒนาสูตรความเสียหาย RPG? - tl; dr คำหลักที่คุณกำลังมองหาคือsigmoid curve
BlueRaja - Danny Pflughoeft

@ BlueRaja ฉันคิดว่ามันไม่ซ้ำกัน คำถามนี้เกี่ยวกับฟังก์ชั่นลดผลตอบแทนโดยทั่วไป - คำถามหนึ่งเกี่ยวกับการคำนวณความเสียหาย ในขณะที่มันเกิดขึ้นคำตอบของคำถามนั้นส่วนใหญ่จะพูดถึงฟังก์ชั่นการลดลง - กลับ แต่ฉันคิดว่าคำถามยังคงแตกต่างกันอย่างชัดเจน
Anko

คำตอบ:


30

คุณต้องการเริ่มต้นด้วยฟังก์ชัน asymptotic นั่นคือหนึ่งที่เริ่มต้นด้วยตัวเลขaและวิธีการจำนวนอื่นbแต่ไม่เคยไปถึงมัน มันอาจเป็นไปได้ง่ายที่สุดถ้าและa = 0 b = 1คุณจะใช้สมการนี้ป้อนจำนวนจุดสถิติ (คะแนนโชค) ที่ตัวละครมีและรับค่าสถิติจริง (โอกาส Crit) เป็นผลลัพธ์

ตัวอย่างง่ายๆคือy = x / (x + n)ที่ที่nมีค่าคงที่เป็นบวก นี่xคือข้อมูลเข้าของคุณที่คุณป้อนจำนวนจุดสถิติและyผลลัพธ์ของคุณซึ่งคุณจะได้รับค่าสถิติขั้นสุดท้าย

สำหรับn = 5ตรวจสอบสิ่งที่ดูเหมือนว่า:

y = x / (x + 5) พล็อตสำหรับ x ใน [0,100]

เมื่อคุณให้อาหารx = 0คุณจะได้รับy = 0แต่ไม่ว่าxคุณจะใส่อะไรเข้าไปขนาดyนั้น

ตอนนี้คุณสามารถปรับแต่งสิ่งนี้ตามความปรารถนาของคุณ คุณสามารถคูณด้วยตัวคูณสเกลเพื่อตั้ง 'หมวก' เป็นสิ่งที่คุณต้องการ y = a * x / (x + 5). หากคุณต้องการฝาเป็น 40% ให้คูณด้วย. 4 y = .4 * x / (x + n). ตอนนี้เมื่อคุณกินอาหารในx's, yจะเพิ่มขึ้น แต่มันจะไม่เคยค่อนข้างถึง 0.4

ปรับnเพื่อกำหนดความเร็วที่เร็วขึ้นหรือช้าลงของสมการ n = 100กำลังจะเพิ่มขึ้นช้ากว่ามากn = 5:

y = x / (x + 100) พล็อตสำหรับ x ใน [0,400]

คุณสามารถแก้สมการนี้ได้nถ้าคุณรู้ว่าคุณต้องการค่าสถิติที่คุณต้องการเข้าถึงที่จุดสถิติจำนวนเฉพาะ สมมติว่าตัวละครน่าจะมีโอกาส Crit 35% ที่ 100 คะแนนของ Luck แก้.35 = .4 * 100 / (100 + n)สำหรับอัตราผลตอบแทนnn = 14.29

ตัวเลขเหล่านี้ไม่จำเป็นต้องเป็นค่าคงที่แบบดิบ บางทีสถิติอื่น ๆ nเข้าไปในการคำนวณค่าของ บางทีตัวละครบางตัวมีแตกต่างกันn's เพื่อให้พวกเขาดีขึ้นในขนาดของพวกเขา 'แนะนำ' สถิติ

หากคุณต้องการเส้นโค้งที่มีรูปร่างแตกต่างหรือซับซ้อนกว่านั้นมีตัวอย่างอื่น ๆ ของฟังก์ชั่นซีมโทติคที่คุณสามารถใช้ได้เช่นกัน ฉันจะปล่อยให้คุณสำรวจสิ่งที่คุณต้องการ


3
เส้นโค้งที่ฉันชอบคือเลขชี้กำลัง เพียงใช้อัตราส่วนคงที่ของพูลที่เหลือในแต่ละระดับ
John Dvorak

@JanDvorak เพื่อความสมบูรณ์คุณสามารถให้ตัวอย่างได้หรือไม่? มีเส้นโค้งเลขยกกำลังจำนวนมากและผู้อ่านอาจไม่รู้วิธีใช้คำแนะนำของคุณจากความคิดเห็นก่อนหน้านี้เพียงอย่างเดียว
อดัม

นี่เป็นจุดเริ่มต้นที่ดีและคณิตศาสตร์อธิบายได้ดี แต่โปรดจำไว้ว่าคุณไม่สามารถเลือกฟังก์ชั่นที่ดูดี ปัญหานี้ต้องมีการพิจารณาอย่างรอบคอบและ tweaking มากมาย ตัวอย่างเช่นหนึ่งในข้อเสียของวิธีนี้คือความท้อแท้ของความเชี่ยวชาญ หากสถิติทั้งห้านั้นใช้งานได้อย่างเท่าเทียมกันคะแนนที่ใช้กับสถิติที่พัฒนาน้อยที่สุดนั้นจะมีค่ามากที่สุด (และสถิติที่พัฒนาน้อยที่สุด) การสร้างในอุดมคติจะเป็นการกระจายจุดเท่ากันซึ่งทำให้ผู้เล่นเลือกได้ว่าจะใช้มันอย่างไรให้น่าสนใจน้อยลง
Marcks Thomas

@MarcksThomas นั่นไม่ใช่การรวมพลังระหว่างคุณลักษณะหรือความสามารถในการแยกแอตทริบิวต์และ "ชนะ" อย่างมีชั้นเชิง ยกตัวอย่างเช่นลองนึกภาพนักธนูที่น่าทึ่งที่เพิ่มความว่องไวจนถึงจุดที่ศัตรูตายก่อนที่พวกเขาจะไปถึงแม้ว่าความว่องไวจะลดประสิทธิภาพ แต่การเลือกกลยุทธ์ก็ทำให้คุณสมบัติอื่น ๆ ไม่สำคัญ กลยุทธ์ที่เกี่ยวข้องกับความแข็งแกร่งอาจมีประสิทธิภาพเท่าเทียมกันดังนั้นคุณลักษณะจึงมีค่า "เท่ากัน" แต่กลยุทธ์มักหมายถึงความเชี่ยวชาญเฉพาะด้าน หากระบบคุณลักษณะของคุณให้รางวัลพิเศษเช่นกันเกม diverges
Yakk

ฉันเรียกสิ่งนี้ว่าระบบ "ดึงหินออกจากกระเป๋า" ค่าP = x/(x+n)คือความน่าจะเป็นเมื่อให้ถุงที่มีหินดำ n ก้อนและหินขาว x ก้อนให้คุณวาดหินสีขาวออกจากถุงตาบอด วิธีหนึ่งที่คุณสามารถทำได้คือทำให้ crits ตั้ง X = โชคของคุณและ N = โชคของพวกเขา โอกาสที่คุณจะคริติคอลนั้นคือ 50% ถ้าคุณมีโชคเช่นเดียวกับศัตรู หากคุณต้องการให้โอกาสพื้นฐานเป็น 10% ดังนั้นเรา X = โชคของคุณ, N = 9x โชคของพวกเขา
Yakk

10

ฐานที่ดีจะเป็นฟังก์ชั่นเช่นarctanนี้เนื่องจากมันผ่านจุดกำเนิดและแสดงเส้นกำกับแนวนอน

arctan

ปรับขนาดตาม40 / (pi/2)หรือ80/piสำหรับขีด จำกัด ที่คุณต้องการ จากนั้นแปลงร่างluckเพื่อให้ได้ความชันของเส้นโค้งที่คุณต้องการ

critical = 80/pi * arctan(f(luck))

8

ฉันชอบวิธีที่เกม Souls จัดการกับปัญหานี้ แทนที่จะทำให้สถิติแต่ละตัวให้โบนัสตามฟังก์ชั่นต่อเนื่องตามที่ได้รับการแนะนำมันให้โบนัสในฟังก์ชั่นเชิงเส้นเป็นชิ้น ๆ

ฉันไม่สามารถจำตัวเลขที่แน่นอนจากส่วนบนสุดของหัวของฉันได้ แต่ฟังก์ชั่นนั้นอยู่ในแนวของสิ่งต่อไปนี้

{0 <= x <20: y = 4x, 20 <= x <30: y = 3x + 20, 30 <= x <40: y = 2x + 50, 40 <= x <60: y = 1x + 90 , 60 <= x: y = 0.5x + 120}

พล็อต

วิธีนี้ให้ประโยชน์มากมายกับผู้ออกแบบและผู้เล่น นักออกแบบได้รับผลประโยชน์ตามที่คุณสามารถปรับแต่งผลประโยชน์ที่แน่นอนต่อหนึ่งจุดในทักษะที่ค่อนข้างเป็นธรรมและผู้เล่นจะได้รับประโยชน์เมื่อพวกเขารู้ว่าพวกเขาจะได้รับประโยชน์มากน้อยเพียงใดในแต่ละระดับ

ในกรณีของฟังก์ชั่นต่อเนื่องบางระดับอาจให้ประโยชน์ที่ไม่ได้รับจากตัวเลขเนื่องจากนามแฝงการวัด แน่นอนว่าระดับสุดท้ายให้โบนัส XYZ เพิ่มขึ้น 0.9 แต่เนื่องจากมูลค่าที่แท้จริงเพิ่มขึ้นจาก 23.52 เป็น 24.42 และคุณปัดเศษตัวเลขก่อนแสดงผู้เล่นจะไม่รู้ว่ามีอะไรเปลี่ยนแปลงไป

จากมุมมองของ UX ฉันขอแนะนำให้ไปกับฟังก์ชั่นเชิงเส้นแบบต่อเนื่อง อย่างไรก็ตามการใช้ฟังก์ชั่นต่อเนื่องสามารถปรับแต่งได้ง่ายกว่าในภายหลังเนื่องจากผู้เล่นจะไม่ติดกับค่าคงที่แบบกลม


1
การประมาณของเส้นโค้งที่ไม่ต้องใช้คณิตศาสตร์มากและง่ายต่อการเปลี่ยนแปลง ฉันชอบมัน. :)
Casey Kuball

> คุณรอบจำนวนก่อนที่จะแสดงมัน => วิธีหนึ่งในการชดเชยคือการจำนวนเงินที่เพิ่มขึ้นก่อนที่จะเพิ่มและอนุญาตเฉพาะจำนวนเต็มระดับสถิติ หรือแล้วที่จะหลีกเลี่ยงไม่ได้ตั้งใจไปกว่าหมวกนุ่ม ceilfloorx <= 0: x = 1
บ๊อบ

1
ในขณะที่คุณยังสามารถใช้งานฟังก์ชั่นตามเข็มนาฬิกาได้ แต่มันไม่มีเอฟเฟกต์ที่คุณต้องการที่นี่ มูลค่าโชคคือเปอร์เซ็นต์ที่มีคะแนนสูงสุด 400 รายการ ซึ่งหมายความว่าคะแนนการให้คะแนนทุกจุดจะต้องส่งผลให้ได้รับมูลค่าย่อย 1% แม้ในฟังก์ชั่นเชิงเส้นด้วยโชค 100% เคล็ดลับเพียงแค่แสดงจุดทศนิยมเพียงพอที่ y (399) แตกต่างจาก y (400) ฟังก์ชั่นของคุณทำสิ่งเดียวกันโดยทำให้ y โตขึ้นมากดังนั้นการเพิ่มสามารถเป็นส่วนสำคัญได้เสมอ ที่ x = 40, y มากกว่า 4 เท่าของค่า x
MichaelS

@MichaelS ฉันแค่ยกตัวอย่างประเภทของฟังก์ชั่นที่ใช้ใน Dark Souls มันจะต้องมีความสมดุลที่แตกต่างกันขึ้นอยู่กับสถานการณ์ที่ใช้กับ แต่จุดของฉันยังคงยืนอยู่ที่ผู้เล่นจะเข้าใจถึงผลกระทบของฟังก์ชั่นเชิงเส้นเป็นชิ้น ๆ อย่างง่ายดายมากกว่าเส้นโค้งอาร์กแทนเจนต์หรือรูปกรวย
Kaslai

3

Jan Dvorak ชี้ให้เห็นถึงฟังก์ชั่นเลขชี้กำลังในความคิดเห็น ฉันจะอธิบายที่นี่

โปรดทราบว่าการดำเนินการเลขชี้กำลัง (และตรีโกณมิติ) นั้นมีราคาแพงกว่าการคำนวณรากที่สองซึ่งยิ่งกว่าคณิตศาสตร์พื้นฐานมากยิ่งกว่าการคำนวณแบบพื้นฐานดังนั้นคุณอาจจะดีกว่าด้วยวิธีของอดัมถ้าคุณทำการคำนวณเหล่านี้หลายครั้งต่อวินาที . หากคุณเพียงแค่คำนวณค่าเมื่อผู้เล่นเลเวลเปลี่ยนอุปกรณ์ ฯลฯ ความเร็วไม่สำคัญดังนั้นใช้ทุกอย่างที่ทำให้คุณได้โค้งที่ดีที่สุด

ฟังก์ชั่นการชี้แจงบางฐานBเพื่ออำนาจบางxy=B^x , นักคณิตศาสตร์มักใช้ฐานของe (~ = 2.718) แต่ไม่มีเหตุผลที่คุณไม่สามารถใช้ 2 หรือ 10 ได้หากคุณต้องการ

y=e^x มีลักษณะเช่นนี้: y = x ^ อี

สังเกตว่าด้านซ้ายกำลังเคลื่อนที่แบบ asympotically เป็น 0 ดังนั้นเราสามารถพลิกแกน x ได้โดยทำy=e^(-x)แต่มันยังคงลดลงจาก 1 เป็น 0 และเราต้องการให้มันขึ้น ดังนั้นเราจึงสามารถพลิกมันข้ามแกน y ด้วย-y= e^(-x)ทีนี้มันเพิ่มขึ้นจาก -1 เป็น 0 เราสามารถเพิ่ม 1 เพื่อรับy=1- e^(-x)และมันเพิ่มขึ้นจาก 0 เป็น 1

Y = 1-E ^ (- x)

จากที่นี่มันเป็นเพียงเรื่องของการปรับขนาดทั้งแนวตั้งและแนวนอน เราสามารถคูณสิ่งทั้งปวงด้วยค่าบางอย่างลองเรียกมันว่าAซึ่งตั้งค่าขีด จำกัด ของซีมโทติค จากนั้นเราสามารถคูณxด้วยค่าอัตราการเปลี่ยนแปลง, k , เพื่อปรับว่ามันจะปิดเร็วแค่ไหนในขีด จำกัด

y=A*(1 - e^(-k*x))นี้จะช่วยให้เราสมการสุดท้ายของ การใช้ค่าของk=0.012และA=0.5เราสามารถตั้งค่าขีด จำกัด เป็น 50% และปล่อยให้ค่านั้นใกล้เคียงกับค่า จำกัดx=400นั้น

การ y = 0.5 * (1-E ^ (- 0.012 k *))

ตอนนี้คุณสามารถปรับแต่งบางสิ่งนี้ หนึ่งบิดที่ฉันทำคือเปลี่ยนA=0.5041ดังนั้นถ้าเราปัดเป็นเปอร์เซ็นต์ด้วย 2 ทศนิยม (เช่น 32.23%), y (399) = 49.99% และ y (400) = 50.00% จาก y (347) เป็นต้นไปมีหลายสถานที่ที่ใช้เวลาสองจุดเพื่อรับการเปลี่ยนแปลง 0.01% แต่จุดสุดท้ายที่เป็นไปได้ยังคงให้ผลประโยชน์ที่จับต้องได้

อีกวิธีหนึ่งเราสามารถปรับแต่งkค่าเพื่อให้มีผลที่คล้ายกัน ที่k=0.02305, รอบมูลค่าให้กับ 49.99% ณy=399และ 50.00% y=400ที่ อย่างไรก็ตามนี่เป็นปัญหาที่กราฟนั้นตื้นมากในตอนท้าย - ใช้เวลา 48 คะแนนเพื่อให้ได้ร้อยเปอร์เซ็นต์สุดท้าย (จากy(352)=49.99%ไปy(399)=49.99%ถึงy(400)=50.00%) และโอกาส 1% ช่วงสุดท้ายจะมี 230 คะแนน (จากy(170)=49.01%ถึงy(400)=50.00%) ซึ่งอาจจะลดน้อยลงเกินไปเมื่อผลตอบแทน

หากคุณต้องการคุณสามารถปรับทั้ง A และ k ดังนั้นมันจึงลดลงถึงขีด จำกัด ที่ค่อนข้างสูงกว่าในอัตราที่ช้าลงเพื่อให้บางสิ่งระหว่างการสลายเชิงเส้นและเลขชี้กำลัง ทำy=0.6*(1-e^(-0.00447*x))คุณจะจบลงด้วยสิ่งนี้: การ y = 0.6 * (1-E ^ (- * 0.00447 x))

โปรดทราบว่าเส้นโค้งยังคงดำเนินต่อไปกว่า 50% แต่เนื่องจากมีขีด จำกัด ที่ยาก 400 คะแนนผู้เล่นจะไม่สามารถผ่านจุดนั้นได้ (และหากพวกเขาจัดการผ่านมันได้จะมีขีด จำกัด ที่ยาก 60% crit) ด้วยสมการนี้คุณสามารถใช้สถานที่ 1 ทศนิยมและยังคงเห็นกำไรทุก 2 ถึง 3 จุดด้วยเห็บสุดท้ายจากไปy(399)=49.9%y(400)=50.0%

ในทางคณิตศาสตร์สมการก่อนหน้านี้อาจดูดีกว่าเนื่องจากพวกเขาใกล้ถึงจริงแล้ว 50% แต่โดยส่วนตัวแล้วฉันคิดว่ากำไร 0.1% ทุก ๆ คู่คะแนนรู้สึกดีกว่ากำไรที่ 0.01% ถึงแม้จะมีA=0.05041และk=0.012ก็จะใช้เวลา 102 จุดที่จะไปจากการy(298)=49.00% y(400)=50.00%25% ของคะแนนที่ใช้ไปกับ 2% ของค่า crit ของคุณอาจลดลงไปมากเกินไป สมการ 60% ใช้เวลาเพียง 20 คะแนนสำหรับเปอร์เซ็นต์สุดท้าย (ซึ่งยังคงสูงกว่า 5 คะแนนที่จำเป็นสำหรับ 4 เปอร์เซ็นต์แรก)

ด้วยสมการหลายครั้งสุดท้ายนี้ฉันแค่เสียบสมการเข้ากับสเปรดชีตและปรับค่าด้วยตนเองจนกว่าพวกเขาจะดูดี คุณต้องทำอะไรที่คล้ายกันถ้าคุณต้องการหมวกที่แตกต่าง


2
หมายเหตุเกี่ยวกับความเร็วสัมพัทธ์ของการดำเนินการทางคณิตศาสตร์นั้นถูกต้อง แต่อาจไม่เกี่ยวข้องกับสถิติผู้เล่น คอขวดในเกมที่ทันสมัยมักจะเป็นสิ่งที่จัดการหลายพันรายการต่อเฟรม (เช่นฟิสิกส์และการเรนเดอร์) สคริปต์เกมเพลย์ที่อาจใช้เวลาหลายสิบครั้งต่อเฟรมนั้นไม่น่าจะเป็นรอยได้เมื่อเทียบกับเรื่องนี้และโดยทั่วไปมักจะเต็มไปด้วยแคชที่ขาดหายไป tl; dr: อย่ารู้สึกกดดันเพื่อหลีกเลี่ยง ops ราคาแพงนอกเสียจากคุณเขียน shaders หรือสิ่งของอื่น ๆ ที่จำเป็นต้องใช้แบทช์ขนาดใหญ่
DMGregory

-1

สำหรับวิธีแก้ปัญหาที่ง่ายมากแล้วจะเป็นรากที่สอง x 2

สแควร์รูทของ 400 (มากที่สุดที่เป็นไปได้) คือ 20, 20 * 2 = 40


ทำไมถึงลงคะแนน? มันแก้คำถามที่ถามและง่ายซึ่งก็ถาม
Catwood

1
ฉันไม่ใช่ผู้ลงคะแนน แต่อาจเป็นเพราะคำตอบของคุณเฉพาะเจาะจงมากเกินไปและไม่ได้ให้ข้อมูลใด ๆ ที่ยังไม่ได้ให้ (สแควร์รูทเป็นกำลังยกกำลังของ1/2) และคุณไม่ได้อธิบาย เหตุผลที่สิ่งนี้มีประโยชน์
Kaslai

ฉันไม่ได้ลงคะแนน แต่ฉันไม่คิดว่านี่เป็นคำตอบที่ดีเพราะมันไม่ยืดหยุ่นมาก - สแควร์รูทไม่ใช่แบบอะซิมโทติคดังนั้นหากระดับสูงสุดเปลี่ยนไปเรื่อย ๆ คุณต้องเปลี่ยนสูตรเพื่อรักษาระดับสูงสุด สถิติเดียวกัน
BlueRaja - Danny Pflughoeft
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.