การมอบหมายงาน


10

ใน RTS ที่คนงานได้รับมอบหมายเช่นสร้างกำแพงคนงานจะตัดสินใจได้อย่างไรว่าจะสร้างกำแพงแบบใด

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

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

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

ป้อนคำอธิบายรูปภาพที่นี่

คนงาน 1 และ 2 ได้รับคำสั่งให้ขุดสี่เหลี่ยม A, B, C และ D

พวกเขาสามารถเคลื่อนย้ายหนึ่งตารางต่อเกมติ๊กและการขุดหนึ่งตารางใช้เวลา 10 เห็บ

คุณจะตัดสินใจได้อย่างไรว่าคนงานเหมืองคนไหนทำเหมืองสี่เหลี่ยม

ดูเหมือนว่าตัวเองชัดเจนว่า 1 ควรเป็นของฉันและ 2 ควรเป็นของฉัน

1 คือ 4 สี่เหลี่ยมห่างจาก A ดังนั้นจะทำการขุดเสร็จใน 14 เห็บ 1 ควรจะไปที่ไหนต่อไปและทำไม?

และถ้ามีอีกสี่เหลี่ยมจัตุรัส - E - ที่จะขุดเหนือ B โดยตรง?

ตรรกะที่ผู้ปฏิบัติงานใช้เพื่อตัดสินใจว่าจะดำเนินการต่อไปคืออะไร


ฉันจะลองเสี่ยงโชคของฉันใน SO แทน: stackoverflow.com/questions/18634701/assigning-worker-tasks - หาก mod อาจจะปิด / ลบได้หรือไม่
จะ

1
การโพสต์ข้ามไม่ใช่สิ่งที่ดี สิ่งที่คุณทำที่นี่คือการเสียเวลาของทุกคนที่ตอบคุณด้านล่าง มันเป็นวิธีที่เห็นแก่ตัวมากในการใช้เว็บไซต์ SE
MichaelHouse

คำตอบ:


6

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

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

อย่างไรก็ตาม RTS หลายแห่ง (SC และ SC2) ไม่มีคนงานประเมินโหนดจนกว่าพวกเขาจะมาถึง ผู้นำคนนี้เดินไปเรื่อย ๆ จนกว่าจะพบโหนดทรัพยากร สิ่งนี้จะช่วยให้ได้รับรางวัลทักษะ / การเพิ่มประสิทธิภาพมากขึ้น (เคยเห็นผู้ปฏิบัติงานที่ยอดเยี่ยมแตกต่างกันอย่างไร) อย่างไรก็ตามผู้เล่นส่วนใหญ่ของคุณจะทำกล่องทั้งหมดคลิกและจะรำคาญว่าพวกเขาทั้งหมดไปที่ตำแหน่งเดียวกันก่อน

การใช้งานที่แน่นอนจะแตกต่างกันไปตามวิธีการจัดกลุ่มทรัพยากร ในต้นไม้และปลาของ AoE นั้นกว้างใหญ่ต่อเนื่องดังนั้นผู้รวบรวมอาจจบลงค่อนข้างไกลเมื่อเกมดำเนินไป แต่ในเกมอย่าง SC และ Red Alert นั้นอยู่ในแหล่งข้อมูลแยก ดังนั้นคนงานจะต้องดูรอบ ๆ แพทช์นั้นโดยเฉพาะ

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


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

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

2

ทางออกและความคิด:

วิธีแก้ปัญหา: คุณสามารถให้โหนดการรวบรวมถูกวางในคิวเมื่อคลิกจากนั้นเมื่องานเพิ่มขึ้นไปด้านบนของคิวค้นหาค่าคิวงานที่ถ่วงน้ำหนักสำหรับคนงานแล้วหาเพื่อนบ้านที่ใกล้ที่สุดด้วยค่าคิวงานที่ถ่วงน้ำหนักที่ดีที่สุด ( ค่าคิว)

ในตัวอย่างของคุณคุณสามารถมีค่าคิวที่เหมาะสมที่สุดเป็น 0 (หมายถึงไม่มีงานปัจจุบัน) เพิ่ม 1 ให้กับค่าคิวสำหรับแต่ละตารางที่พวกเขาจะต้องเดินทาง (เวลาเดินทาง) และ 10 สำหรับแต่ละงาน (เวลาที่จะทำงาน) ลบ 1 จากค่าคิวของผู้ปฏิบัติงานแต่ละคนสำหรับแต่ละหน่วยเวลาที่ผ่านไป (หากค่าคิวเริ่มต้นคือ 10 จากนั้นหลังจาก 3 หน่วยเวลาค่าคิวจะเป็น 7) จากนั้นคุณจะพบกับเพื่อนบ้านที่ใกล้ที่สุด (ในกรณีที่ผู้ปฏิบัติงานหลายคนมีค่าคิวที่เทียบเท่ากัน) เพื่อค้นหาผู้ปฏิบัติงานที่ควรทำ

ดังนั้นสำหรับตัวอย่างสมมติว่าการรวบรวมโหนดปรากฏขึ้นจากคิวงานตามลำดับตัวอักษร (AD) และไม่มีการเคลื่อนไหวใด ๆ ในขณะที่คิวปรากฏขึ้น:

(values in format [total] = [preexisting value] + [current task distance])
A Pops: 
    queue value of 1: 4 = 0 + 4 
    queue value of 2: 19 = 0 + 19
    Assigned to 1.
B Pops:
    queue value of 1: 24 = 14 + 10 (distance to B from A) 
    queue value of 2: 9 = 0 + 9
    Assigned to 2.
C Pops:
    queue value of 1: 25 = 14 + 11
    queue value of 2: 20 = 19 + 1 
    Assigned to 2.
D Pops:
    queue value of 1: 36 = 25 + 11
    queue value of 2: 41 = 20 + 21
    Assigned to 1.

ข้อเสียในการทำเช่นนี้: การคำนวณสูง


คิดว่า:

เกมของคุณจะจัดการกับการถูกบล็อกโดยทรัพยากรได้อย่างไร นั่นคือถ้ามีตาราง 4x4 ที่ทุกโหนดเป็นทรัพยากรพนักงานสามารถรับ 4 โหนดภายในได้หรือไม่ ถ้าไม่ตรวจสอบให้แน่ใจว่าคนงานไม่ได้อยู่เฉยๆพยายามไปหาพวกเขา แต่อาจมอบหมายงานที่แตกต่างออกไปและมอบหมายให้คนงานคนหนึ่งรวบรวมโหนดภายนอกหนึ่งตัวไปยังคนที่อยู่ด้านในเมื่อโหนดด้านนอกเสร็จสมบูรณ์ มันอยู่ในคิวงานสำหรับผู้ปฏิบัติงาน)


ใช่สี่เหลี่ยมบางส่วนของทรัพยากรอาจไม่สามารถเข้าถึงได้ (ชั่วคราว)
Will

1

ลองใช้ระบบควบคุมน้ำหนักเพื่อดูว่าถ้ามีการรวบรวมต้นไม้ให้คำนวณการลงโทษแบบซ้อนและโบนัสระยะทาง (ใช้เวลานานแค่ไหนในการรับจากจุด A-> B ด้วยไม้และอื่น ๆ จากนั้นคุณสามารถทำอัลกอริทึมที่ตรวจสอบไม้ที่ใกล้เคียงที่สุดและตรวจสอบน้ำหนักของไม้แล้วเปรียบเทียบว่าเป็นไม้หรือไม่ เป็นที่ต้องการและจากนั้นใช้อันที่มีน้ำหนักต่ำที่สุด

แน่นอนว่าต้องมีการปรับจูน แต่ความคิดนั้นง่าย


1

แต่ละงานควรมีก) ความสำคัญข) สถานะการมอบหมาย (จำนวนคนงานที่มอบหมาย)

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

เพื่อหลีกเลี่ยงการเลิกงานบางอย่างเป็นเวลานาน (เช่นเพราะอยู่ไกล) ความสำคัญควรเพิ่มขึ้นตามกาลเวลา ในกรณีของการเก็บเกี่ยวความสำคัญควรขึ้นอยู่กับจำนวนทรัพยากรประเภทนั้นที่มีอยู่ / จำเป็นในขณะนี้ (เช่นหน่วยที่ผลิตขึ้นหารด้วยหน่วยที่ร้องขอในช่วงเวลาให้)

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

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

อัลกอริทึมอาจจำเป็นต้องปรับเปลี่ยนเล็กน้อยถ้างานของคุณสามารถมอบหมายให้กับคนงานคนเดียวเท่านั้น หากเป็นกรณีนี้ให้ปฏิบัติดังนี้: ผู้ปฏิบัติงานเลือกงานที่มีรางวัลสูงสุดต่อเวลา (แบ่งตามความสำคัญของแต่ละบุคคล) หากผู้ปฏิบัติงานคนอื่นสามารถทำงานเดียวกันกับรางวัลที่คาดหวังต่อเวลาที่สูงกว่าเขาจะเริ่มต้นทำงานที่มอบหมายในปัจจุบัน คนงาน "ว่างงาน" ใหม่แล้วพยายามหางานใหม่ ในตัวอย่างของคุณสิ่งนี้อาจเป็นดังนี้:

  • "C" มีความสำคัญสูงมาก และคนงาน 1 มอบหมายตัวเองให้กับ "C" แม้เขาจะอยู่ห่างไกล
  • ผู้ปฏิบัติงาน 2 ได้รับมอบหมายต่อไปและมีรางวัลที่สูงขึ้นต่อเวลาสำหรับ "C" (เดินน้อยกว่า) ดังนั้นจึงเตะ 1 คนงานออกจากงานและมอบหมายให้ "C" นี่ไม่เสียเวลาเนื่องจากเรายังอยู่ในช่วงเวลาการจำลองที่เหมือนกัน ดังนั้นผู้ใช้จะไม่เห็นการมอบหมายงานนี้ใหม่
  • ผู้ปฏิบัติงาน 1 กำลังมองหางานอื่น ผู้ปฏิบัติงานที่ 1 ไม่ได้เตะคนงาน 2 จาก "C" เนื่องจากรางวัลของเขาต่อเวลานั้นไม่ดีกว่า ดังนั้นเขาจึงได้รับมอบหมายให้ "A" หรือ "B" (ขึ้นอยู่กับความสำคัญ) อีกครั้งนี้ยังคงอยู่ในส่วนการจำลองเวลาเดียวกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.