Giao nhiệm vụ


10

Trong một RTS nơi công nhân được giao nhiệm vụ, ví dụ xây tường, làm thế nào để công nhân quyết định xây tường nào?

Người chơi quyết định những bức tường nào sẽ được xây dựng ở đâu, nhưng họ không chỉ định từng công nhân cho các ô vuông riêng lẻ. Trong nhiều trò chơi RTS, công nhân chỉ đơn giản là thực hiện các nhiệm vụ gần họ, nhưng trong RTS của tôi, tôi muốn sử dụng chiến lược thực hiện các nhiệm vụ rõ ràng trên các ô vuông cụ thể làm chiến lược chính, vì vậy tôi không muốn các công nhân câm tụ lại ở đâu đó và tiếp tục thực hiện các nhiệm vụ đi không xong.

Tôi sử dụng ví dụ xây tường; nó có thể là khai thác đá, làm đường, thu thập gỗ hoặc bất cứ thứ gì. Điều quan trọng là người dùng chọn ở đâu, nhưng không phải ai.

Công nhân chỉ có thể làm việc trên các hình vuông liền kề với hình vuông có thể truy cập; các ô vuông họ tự làm việc có thể là không thể vượt qua cho đến khi công việc hoàn thành.

nhập mô tả hình ảnh ở đây

Công nhân 1 và 2 được yêu cầu khai thác các hình vuông A, B, C và D.

Họ có thể di chuyển một ô vuông trên mỗi tích tắc trò chơi và khai thác một ô vuông mất 10 tích tắc.

Làm thế nào để bạn quyết định mỏ công nhân nào vuông?

Có vẻ như hiển nhiên rằng 1 nên khai thác A và 2 nên khai thác C.

1 là 4 ô vuông cách A, vì vậy sẽ khai thác xong trong 14 tích tắc. Nên đi đâu tiếp theo, và tại sao?

Và nếu có một hình vuông khác - E - được khai thác trực tiếp trên B thì sao?

Logic mà một công nhân sử dụng để quyết định nơi tiếp theo sẽ là gì?


Thay vào đó, tôi sẽ thử vận ​​may của mình trên SO: stackoverflow.com/questions/18634701/assigning-worker-t task - nếu một mod có thể tốt đến mức đóng / xóa nó?
Sẽ

1
Đăng chéo không phải là một điều tốt. Những gì bạn đã làm ở đây là lãng phí thời gian của mọi người đã trả lời bạn dưới đây. Đó là một cách rất ích kỷ để sử dụng các trang SE.
MichaelHouse

Câu trả lời:


6

Đánh dấu nút tài nguyên là bận hoặc giới hạn số lượng công nhân mà một cây có thể được sử dụng. Nếu một công việc được chỉ định để thu thập tại một thời điểm nhất định, điều bạn thực sự nói với họ là thu hoạch cây có sẵn gần nhất.

Hai đường dẫn chính cho việc này: Một cách tiếp cận thực tế sẽ là đánh giá và đánh dấu các tài nguyên trước khi chúng đến. Để ngăn chặn các vấn đề xếp hàng kỳ lạ, cung cấp cho công nhân một tầm nhìn để đánh giá cây. Điều này cho phép công nhân tiếp cận một nút tài nguyên cụ thể trong khi đi bộ đến bản vá. Điều này cung cấp một giới hạn về tối ưu hóa.

Tuy nhiên, nhiều RTS (SC và SC2) không có nhân viên đánh giá một nút cho đến khi họ đến. Nhà lãnh đạo này làm việc để đi lang thang cho đến khi tìm thấy một nút tài nguyên. Điều này cho phép phần thưởng tối ưu hóa kỹ năng / tối ưu hóa hơn, (Bạn có bao giờ thấy nhân viên tuyệt vời chia tay không?) Tuy nhiên, hầu hết người chơi của bạn sẽ chỉ đóng hộp tất cả, nhấp và cảm thấy khó chịu khi tất cả họ đều đi cùng một vị trí trước tiên.

Việc thực hiện chính xác sẽ thay đổi dựa trên cách các tài nguyên được nhóm lại. Trong AoE, cây và cá là những bản mở rộng liên tục, vì vậy những người tụ tập có thể sẽ ở khá xa khi trò chơi tiếp diễn. Nhưng trong các trò chơi như tài nguyên SC và Red Alert được đặt trong các bản vá rời rạc. Vì vậy, một công nhân chỉ phải nhìn xung quanh bản vá cụ thể đó.

EDIT sau khi chỉnh sửa của bạn: Đừng căng thẳng quá mức về sự thiếu hiệu quả của nhân viên. Bất kỳ RTS nào tôi có thể nghĩ là có sự thiếu hiệu quả của nhân viên. Những thứ như chia tách công nhân phát sinh từ việc người chơi quản lý công nhân của họ tốt hơn trò chơi. Tôi nghĩ rằng bạn có thể đang có một quan điểm lập trình viên về điều này và không phải là một nhà thiết kế. Vấn đề còn lại của singe tick có thể được giải quyết chỉ bằng cách điều chỉnh số lượng và có các nút có thể thu hoạch được trong một số chuyến đi riêng biệt. Sự thiếu hiệu quả của công nhân đang làm bạn bối rối, bởi vì bạn biết hệ thống đằng sau nó. Tuy nhiên, nếu những người chơi thử của bạn không chú ý thì đừng ở quá lâu.


Tôi đã chỉnh sửa câu hỏi để làm rõ rằng trong RTS của mình, người chơi sẽ quyết định thu thập các tài nguyên nào và loại nhiệm vụ của mỗi công nhân, nhưng không nên quản lý vi mô công nhân nào đi đâu.
Sẽ

Vâng, trò chơi của tôi có lẽ không điển hình ở chỗ tôi muốn người dùng chọn gạch nào sẽ thu hoạch và điều đó rất chiến lược. Nhưng tôi không muốn người dùng phải thực hiện các công việc riêng lẻ để hoàn thành công việc. Tôi đã thêm một minh họa cho câu hỏi.
Sẽ

2

Giải pháp và suy nghĩ:

Giải pháp: Bạn có thể đặt các nút tập hợp trong hàng đợi khi nhấp vào, sau đó khi một công việc tăng lên đầu hàng đợi, hãy tìm giá trị hàng đợi nhiệm vụ có trọng số cho các công nhân sau đó tìm hàng xóm gần nhất với giá trị hàng đợi nhiệm vụ có trọng số tốt nhất ( giá trị hàng đợi).

Trong ví dụ của bạn, bạn có thể có giá trị hàng đợi tối ưu là 0 (ngụ ý không có tác vụ hiện tại). Thêm 1 vào giá trị hàng đợi cho mỗi ô vuông họ sẽ phải di chuyển (thời gian di chuyển) và 10 cho mỗi nhiệm vụ (thời gian để thực hiện nhiệm vụ). Xóa 1 khỏi giá trị hàng đợi của mỗi công nhân cho mỗi đơn vị thời gian trôi qua (nếu giá trị hàng đợi bắt đầu là 10 thì sau 3 đơn vị thời gian, giá trị hàng đợi sẽ là 7). Sau đó, bạn tìm hàng xóm gần nhất (trong trường hợp nhiều công nhân có giá trị hàng đợi tương đương) để tìm công nhân nên thực hiện nhiệm vụ đó.

Vì vậy, ví dụ của bạn, giả sử các nút thu thập bật ra từ hàng đợi tác vụ theo thứ tự bảng chữ cái (AD) và không có chuyển động nào được thực hiện trong khi hàng đợi bật lên:

(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.

Nhược điểm để làm điều đó như thế này: tính toán cao.


Nghĩ:

Làm thế nào là trò chơi của bạn sẽ xử lý bị chặn bởi các tài nguyên? tức là nếu tồn tại một lưới 4 x 4 trong đó mỗi nút là một tài nguyên, công nhân có thể có được 4 nút bên trong không? Nếu không, hãy đảm bảo rằng các công nhân không chỉ nhàn rỗi ở đó để cố gắng với họ, nhưng có thể giao cho họ một nhiệm vụ khác và giao một trong số các công nhân tập hợp một trong các nút bên ngoài cho các nút bên trong sau khi nút bên ngoài hoàn tất (đặt nó trong một hàng đợi nhiệm vụ cho công nhân).


có, một số ô vuông pf tài nguyên có thể (tạm thời) không thể truy cập được.
Sẽ

1

hãy thử có một số hệ thống cân, nếu cây đang được thu thập, hãy tính một số loại hình phạt xếp chồng và một số loại tiền thưởng từ xa. (mất bao lâu để đi từ điểm A-> B với gỗ, v.v. Sau đó, bạn có thể thực hiện một số thuật toán kiểm tra gỗ gần nhất và kiểm tra trọng lượng của nó, và sau đó so sánh nếu nó có mong muốn. và sau đó sử dụng một trong những trọng lượng thấp nhất.

Tất nhiên điều này đòi hỏi một số điều chỉnh tốt. nhưng ý tưởng thì đơn giản


1

Mỗi công việc nên có a) mức độ quan trọng b) trạng thái phân công (# công nhân được giao)

Một công nhân sau đó có thể quyết định công việc mang lại cho anh ta "phần thưởng" nhiều nhất mỗi lần. Phần thưởng được tính bằng mức độ quan trọng chia cho số lượng công nhân được phân chia chia cho thời gian anh ta cần đầu tư (đi bộ và thực hiện công việc). Nếu nhân viên của bạn có thể chuyên về các công việc (ví dụ như chặt gỗ), họ sẽ thực sự thích các nhiệm vụ mà họ có thể thực hiện một cách hiệu quả. Tất nhiên các công việc chỉ nên được chỉ định, nếu chúng có thể được tiếp tục vào đúng thời điểm (ví dụ: nguồn lực cần thiết phải có sẵn).

Để tránh có một số công việc hoàn tác trong thời gian dài (ví dụ vì nó ở rất xa). Tầm quan trọng nên tăng theo thời gian. Trong trường hợp thu hoạch, tầm quan trọng cũng phải phụ thuộc vào số lượng tài nguyên của loại đó có sẵn / cần thiết vào lúc này (ví dụ: các đơn vị sản xuất chia cho đơn vị được yêu cầu trong một khoảng thời gian nhất định).

Để tránh công nhân thay đổi công việc của họ một cách nhanh chóng, hãy để họ chỉ thay đổi công việc hiện tại, nếu phần thưởng trở nên tốt hơn đáng kể (theo một ngưỡng nhất định). Ngoài ra, bạn có thể áp dụng chi phí nhân đôi cho lần đi bộ ban đầu vào công việc, khi tính toán phần thưởng cho mỗi giá trị thời gian. Hơn nữa, bạn nên để tính toán lại các công nhân tối ưu từng công việc, không phải tất cả cùng một lúc.

Ngoài ra, thêm một số ngẫu nhiên vào phần thưởng được tính toán. Điều này sẽ khiến phân phối công nhân tốt hơn cho các công việc khác nhau (theo cách này họ không chỉ "tất cả" đi làm cùng một công việc). Tuy nhiên, hiệu ứng này đã giảm đi bằng cách tính toán lại công việc tối ưu tiếp theo cho một công nhân và điều chỉnh số lượng công nhân đã được giao (nhiều công nhân hơn trong cùng một công việc sẽ giảm phần thưởng dự kiến).

Thuật toán có thể cần được điều chỉnh một chút, nếu công việc của bạn chỉ có thể được giao cho một công nhân. Nếu đây là trường hợp, hãy làm như sau: Một công nhân chọn công việc có phần thưởng cao nhất mỗi lần (tầm quan trọng chia cho thời gian cá nhân cần thiết). Nếu một công nhân khác có thể làm công việc tương tự với phần thưởng dự kiến ​​cao hơn mỗi lần, anh ta sẽ đuổi việc nhân viên hiện đang được giao. Công nhân "thất nghiệp" mới sau đó cố gắng tìm một công việc khác. Trong ví dụ của bạn, điều này có thể như thế này:

  • "C" có tầm quan trọng rất cao. Và worker 1 tự gán cho "C", thậm chí anh ta còn ở rất xa.
  • Công nhân 2 được chỉ định tiếp theo và có phần thưởng cao hơn mỗi lần cho "C" (ít đi bộ hơn). Vì vậy, nó đuổi công nhân 1 ra khỏi công việc và tự gán cho "C". Điều này không tốn thời gian, vì chúng ta vẫn ở trong cùng một lát thời gian mô phỏng. Vì vậy, người dùng sẽ không thấy sự phân công lại công việc này.
  • Công nhân 1 sau đó đang tìm kiếm một công việc khác. Công nhân 1 không đuổi công nhân 2 từ "C", vì phần thưởng của anh ta mỗi lần không tốt hơn. Vì vậy, anh ta được gán cho "A" hoặc "B" (tùy thuộc vào mức độ quan trọng). Một lần nữa, đây vẫn là trong cùng một lát thời gian mô phỏng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.