Menugaskan tugas


10

Dalam RTS di mana pekerja ditugaskan misalnya membangun tembok, bagaimana pekerja memutuskan dinding mana yang akan dibangun?

Pemain memutuskan dinding mana yang akan dibangun, tetapi mereka tidak menugaskan pekerja individu untuk kotak dinding masing-masing. Dalam banyak permainan RTS, pekerja hanya melakukan tugas-tugas yang ada di dekat mereka, tetapi dalam RTS saya, saya ingin menggunakan melakukan tugas strategis yang eksplisit pada kotak tertentu sebagai strategi utama, jadi saya tidak ingin pekerja bodoh berkumpul di suatu tempat dan meninggalkan tugas lebih lanjut pergi tidak dilakukan.

Saya menggunakan contoh dinding bangunan; itu bisa menambang batu, membuat jalan, mengumpulkan kayu atau apa pun. Kuncinya adalah pengguna memilih di mana, tetapi bukan siapa.

Pekerja hanya dapat bekerja pada kotak yang berdekatan dengan kotak yang dapat diakses; kotak yang mereka kerjakan sendiri mungkin tidak bisa dilewati sampai pekerjaan selesai.

masukkan deskripsi gambar di sini

Pekerja 1 dan 2 disuruh menambang kotak A, B, C, dan D.

Mereka dapat memindahkan satu kotak per kotak-centang, dan menambang kotak membutuhkan 10 kotak.

Bagaimana Anda memutuskan tambang pekerja mana yang kuadrat?

Tampak jelas bahwa saya harus menambang A dan 2 harus menambang C.

1 berjarak 4 kotak dari A, jadi akan selesai menambangnya dalam 14 tick. Ke mana saya harus pergi berikutnya, dan mengapa?

Dan bagaimana jika ada kotak lain - E - yang akan ditambang langsung di atas B?

Apa logika yang digunakan pekerja untuk memutuskan ke mana harus melanjutkan selanjutnya?


Saya akan mencoba keberuntungan saya pada SO sebagai gantinya: stackoverflow.com/questions/18634701/assigning-worker-tasks - jika seorang mod bisa berbaik hati untuk menutup / menghapusnya?
Will

1
Posting silang bukan hal yang baik. Apa yang Anda lakukan di sini adalah buang waktu semua orang yang menjawab Anda di bawah ini. Ini adalah cara yang sangat egois untuk menggunakan situs SE.
MichaelHouse

Jawaban:


6

Tandai simpul sumber sebagai sibuk, atau batasi jumlah pekerja yang dapat digunakan pohon. Jika seorang pekerja ditugaskan untuk mengumpulkan pada titik tertentu, apa yang sebenarnya Anda katakan kepada mereka adalah memanen pohon terdekat yang tersedia.

Dua jalur utama untuk ini: Pendekatan realistis adalah mengevaluasi dan menandai sumber daya sebelum mereka tiba. Untuk mencegah masalah antrian yang aneh, beri pekerja visi untuk mengevaluasi pohon. Ini memungkinkan pekerja untuk mendekati simpul sumber daya tertentu sambil berjalan ke tambalan. Ini memberikan sedikit tentang optimasi.

Namun, banyak RTS (SC dan SC2) tidak memiliki pekerja yang mengevaluasi sebuah node sampai mereka tiba. Ini para pemimpin pekerja untuk berkeliaran di sekitar sampai sumber daya node ditemukan. Ini memungkinkan hadiah lebih banyak skill / optimasi, (Pernah melihat pemisahan pekerja yang hebat?) Namun, sebagian besar pemain Anda hanya akan mengotak semua, klik, dan kesal bahwa mereka semua pergi ke lokasi yang sama terlebih dahulu.

Implementasi yang tepat akan bervariasi berdasarkan pada bagaimana sumber daya dikelompokkan. Di pohon AoE dan ikan adalah ekspansi terus menerus, jadi pengumpul mungkin berakhir cukup jauh saat permainan berlangsung. Namun dalam game seperti sumber daya SC dan Red Alert terletak di patch diskrit. Jadi seorang pekerja hanya perlu melihat-lihat tambalan itu.

Sunting setelah diedit: Jangan terlalu menekankan pada ketidakefisienan pekerja. RTS apa pun yang saya pikirkan memiliki inefisiensi pekerja. Hal-hal seperti pemisahan pekerja muncul dari pemain yang lebih baik dalam mengelola pekerja mereka daripada permainan. Saya pikir Anda mungkin mengambil perspektif programmer pada saat ini dan bukan desainer. Isu kutu kiri dapat diselesaikan hanya dengan mengutak-atik angka dan membuat simpul dapat dipanen dalam jumlah perjalanan yang berbeda. Inefisiensi pekerja sangat mencolok bagi Anda, karena Anda tahu sistem di baliknya. Namun, jika penguji bermain Anda tidak memperhatikan maka jangan diam terlalu lama.


Saya telah mengedit pertanyaan untuk mengklarifikasi bahwa dalam RTS saya pemain memutuskan sumber daya ubin mana yang akan dipanen, dan jenis tugas masing-masing pekerja, tetapi tidak harus mengelola secara mikro pekerja mana yang pergi ke mana.
Will

Ya, permainan saya mungkin tidak biasa karena saya ingin pengguna memilih ubin mana yang akan dipanen dan untuk itu menjadi sangat strategis. Tapi saya tidak ingin pengguna harus melakukan tugas kecil pada masing-masing pekerja untuk menyelesaikan tugas. Saya telah menambahkan ilustrasi untuk pertanyaan itu.
Will

2

Solusi dan pemikiran:

Solusi: Anda bisa meminta node pengumpul ditempatkan dalam antrian saat diklik, lalu saat pekerjaan naik ke puncak antrian, cari nilai antrian tugas tertimbang untuk pekerja lalu temukan tetangga terdekat dengan nilai antrian tugas tertimbang terbaik ( nilai antrian).

Dalam contoh Anda, Anda dapat memiliki nilai antrian optimal menjadi 0 (menyiratkan tidak ada tugas saat ini). Tambahkan 1 ke nilai antrian untuk setiap kotak yang harus mereka tempuh (waktu perjalanan) dan 10 untuk setiap tugas (waktu untuk melakukan tugas). Hapus 1 dari nilai antrian masing-masing pekerja untuk setiap unit waktu yang lewat (jika nilai antrian mulai adalah 10 maka setelah 3 unit waktu nilai antrian adalah 7). Kemudian Anda menemukan tetangga terdekat (jika beberapa pekerja memiliki nilai antrian yang sama) untuk menemukan pekerja yang harus melakukan tugas itu.

Jadi untuk contoh Anda, dengan asumsi node pengumpul muncul dari antrian tugas dalam urutan abjad (AD) dan tidak ada gerakan yang dilakukan saat antrian muncul:

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

Kelemahan untuk melakukannya seperti ini: sangat komputasi.


Pikir:

Bagaimana gim Anda ditangani dengan diblokir oleh sumber daya? yaitu jika ada kotak 4x4 di mana setiap node adalah sumber daya, dapatkah pekerja mendapatkan 4 simpul batin? Jika tidak, pastikan para pekerja tidak hanya menganggur di sana mencoba untuk mendapatkan mereka, tetapi mungkin menugaskan mereka tugas yang berbeda dan menugaskan salah satu pekerja mengumpulkan salah satu node luar ke yang dalam sekali simpul luar selesai (masukkan dalam antrian tugas untuk pekerja).


ya, beberapa kotak jika sumber daya mungkin (sementara) tidak dapat diakses.
Will

1

cobalah memiliki sistem bobot, bahwa jika pohon dikumpulkan, hitung beberapa jenis penalti susun dan juga semacam bonus jarak. (berapa lama untuk mendapatkan dari titik A-> B dengan kayu, dan sebagainya. maka Anda dapat melakukan beberapa algoritma yang memeriksa kayu terdekat, dan memeriksa beratnya, dan kemudian membandingkan jika itu diinginkan, dan kemudian gunakan yang dengan berat terendah.

tentu saja ini membutuhkan penyetelan yang bagus. tapi idenya sederhana.


1

Setiap pekerjaan harus memiliki a) yang penting b) status penugasan (# pekerja yang ditugaskan)

Seorang pekerja kemudian dapat memutuskan untuk pekerjaan yang memberinya "hadiah" paling banyak per waktu. Imbalan dihitung dengan pentingnya dibagi dengan jumlah pekerja yang ditugaskan dibagi dengan waktu yang dibutuhkan untuk berinvestasi (berjalan dan melakukan pekerjaan). Jika pekerja Anda dapat mengkhususkan diri pada pekerjaan (misalnya memotong kayu), mereka sebenarnya akan lebih menyukai tugas yang dapat mereka lakukan secara efisien. Pekerjaan tentu saja hanya akan ditugaskan, jika dapat dilanjutkan pada saat yang tepat (misalnya sumber daya yang dibutuhkan harus tersedia).

Untuk menghindari beberapa pekerjaan dibatalkan untuk waktu yang lama (misalnya karena jauh). Pentingnya harus meningkat seiring waktu. Dalam hal pemanenan, kepentingan juga harus bergantung pada seberapa banyak sumber daya dari jenis itu tersedia / dibutuhkan saat ini (misalnya unit yang diproduksi dibagi dengan unit yang diminta dalam periode pemberian).

Untuk menghindari pekerja mengubah pekerjaan mereka dengan cepat, biarkan mereka hanya mengubah pekerjaan mereka saat ini, jika hadiahnya menjadi lebih baik secara signifikan (dengan ambang batas tertentu). Anda juga dapat menerapkan biaya ganda untuk berjalan awal ke pekerjaan, saat menghitung imbalan per nilai waktu. Selain itu, Anda harus menghitung ulang pekerja yang optimal satu demi satu, tidak semuanya pada waktu yang bersamaan.

Selain itu, tambahkan beberapa keacakan ke hadiah yang dihitung. Ini akan menyebabkan distribusi pekerja yang lebih baik ke pekerjaan yang berbeda (dengan cara ini mereka tidak hanya "semua" melakukan pekerjaan yang sama). Tetapi, efek ini sudah dikurangi dengan menghitung ulang secara serentak pekerjaan optimal berikutnya untuk seorang pekerja dan mengadaptasi jumlah pekerja yang sudah ditugaskan (lebih banyak pekerja pada pekerjaan yang sama mengurangi imbalan yang diharapkan).

Algoritme mungkin perlu sedikit diadaptasi, jika pekerjaan Anda hanya dapat ditugaskan untuk satu pekerja. Jika demikian, lakukan hal berikut: Seorang pekerja memilih pekerjaan dengan hadiah tertinggi per waktu (kepentingan dibagi dengan waktu yang dibutuhkan individu). Jika pekerja lain dapat melakukan pekerjaan yang sama dengan imbalan yang diharapkan lebih tinggi per waktu, ia memulai pekerja yang saat ini ditugaskan. Pekerja "penganggur" yang baru kemudian mencoba mencari pekerjaan lain. Dalam contoh Anda ini bisa seperti ini:

  • "C" memiliki kepentingan yang sangat tinggi. Dan pekerja 1 menugaskan dirinya untuk "C", bahkan dia jauh lebih jauh.
  • Pekerja 2 ditugaskan berikutnya dan memiliki hadiah yang lebih tinggi per waktu untuk "C" (kurang berjalan). Jadi itu menendang pekerja 1 dari pekerjaan dan menugaskan dirinya ke "C". Ini tidak memerlukan waktu, karena kami masih dalam irisan waktu simulasi yang sama. Jadi pengguna tidak akan melihat pengalihan tugas ini.
  • Pekerja 1 kemudian mencari pekerjaan lain. Pekerja 1 tidak memulai pekerja 2 dari "C", karena hadiahnya per waktu tidak lebih baik. Jadi dia ditugaskan untuk "A" atau "B" (tergantung pada pentingnya). Sekali lagi, ini masih dalam irisan waktu simulasi yang sama.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.