작업 할당


10

근로자가 작업을 수행하는 RTS에서, 예를 들어 벽을 건축하는 경우, 근로자는 건축 할 벽을 어떻게 결정합니까?

플레이어는 어느 벽을 어디에 지어야할지 결정하지만, 개별 작업자를 개별 벽 사각형에 할당하지는 않습니다. 많은 RTS 게임에서 작업자는 단순히 가까운 작업을 수행하지만 RTS에서는 특정 사각형의 명시 적 작업을 전략으로 주요 전략으로 사용하고 멍청한 작업자가 어딘가에 클러스터링하고 더 이상 작업을 떠나기를 원하지 않습니다. 하지 말아라.

나는 예제 건물 벽을 사용합니다. 그것은 돌을 채굴하고, 도로를 만들고, 나무를 모으는 등 무엇이든 될 수 있습니다. 가장 중요한 것은 사용자가 어디를 선택하고 누가 선택하지 않는 것입니다.

작업자는 접근 가능한 사각형에 인접한 사각형에서만 작업 할 수 있습니다. 그들이 작업하는 사각형은 작업이 완료 될 때까지 통과 할 수 없습니다.

여기에 이미지 설명을 입력하십시오

노동자 1과 2는 사각형 A, B, C 및 D를 채굴하라는 지시를받습니다.

그들은 게임 틱 당 하나의 사각형을 움직일 수 있으며 사각형을 채굴하는 데 10 틱이 걸립니다.

어떤 작업자가 어떤 사각형을 채굴하는지 어떻게 결정합니까?

1은 A를 채굴하고 2는 C를 채굴해야한다는 것은 자명 한 것 같습니다.

1은 A에서 4 제곱 떨어져 있으므로 14 틱으로 채굴을 마쳤습니다. 1은 어디로 가야합니까? 왜 그렇습니까?

B 바로 위에 마이닝 될 또 다른 사각형 E가 있다면 어떨까요?

작업자가 다음에 진행할 위치를 결정하는 데 사용하는 논리는 무엇입니까?


나는 그래서 그 대신에 내 행운을 시도 할 것이다 : stackoverflow.com/questions/18634701/assigning-worker-tasks - 모드가 가까이로 너무 친절 될 수 있다면 / 삭제?
Will

1
교차 게시는 좋지 않습니다. 당신이 한 일은 아래에서 당신에게 응답 한 모든 사람들의 시간을 낭비하는 것입니다. SE 사이트를 사용하는 것은 매우 이기적인 방법입니다.
MichaelHouse

답변:


6

자원 노드를 사용 중으로 표시하거나 트리를 사용할 수있는 작업자 수를 제한하십시오. 특정 지점에서 수집하도록 작업 물을 할당 한 경우 실제로 가장 가까운 나무를 수확하는 것입니다.

이를위한 두 가지 주요 경로 : 현실적인 접근 방식은 리소스 노즈가 도착하기 전에 평가하고 표시하는 것입니다. 이상한 큐잉 문제를 방지하려면 작업자에게 나무를 평가할 수있는 비전 범위를 제공하십시오. 이를 통해 작업자는 패치를 진행하면서 특정 리소스 노드에 접근 할 수 있습니다. 이것은 제한적인 최적화를 제공합니다.

그러나 많은 RTS (SC 및 SC2)는 작업자가 도착할 때까지 노드를 평가하지 않습니다. 이 리더들은 자원 노드가 발견 될 때까지 방황하도록지도합니다. 이렇게하면 더 많은 기술 / 최적화 보상을받을 수 있습니다 (멋진 작업자 분할을 본 적이 있습니까?). 그러나 대부분의 플레이어는 상자를 모두 클릭하고 클릭 한 다음 모두 같은 위치로 먼저 이동해야합니다.

정확한 구현은 리소스를 그룹화하는 방법에 따라 다릅니다. AoE에서 나무와 물고기는 연속적인 확장이므로, 게임이 진행됨에 따라 수집가들은 아주 멀리 떨어질 수 있습니다. 그러나 SC 및 Red Alert 리소스와 같은 게임에서는 개별 패치에 있습니다. 따라서 작업자는 특정 패치를 둘러보기 만하면됩니다.

편집 후 편집 : 작업자 비 효율성에 너무 많은 스트레스를주지 마십시오. 내가 생각할 수있는 모든 RTS에는 작업자 비 효율성이 있습니다. 작업자 분할과 같은 것은 플레이어가 게임보다 작업자를 더 잘 관리 할 때 발생합니다. 나는 당신이 디자이너가 아닌 이것에 프로그래머의 관점을 취하고 있다고 생각합니다. 단일 틱 왼쪽 문제는 숫자를 조정하고 별개의 수의 여행에서 노드를 수집하여 해결할 수 있습니다. 시스템의 비하인드 시스템을 알고 있기 때문에 작업자 비 효율성이 눈에 띄게 나타납니다. 그러나 플레이 테스터가 알지 못하면 너무 오래 머물지 마십시오.


RTS에서 플레이어가 수확 할 리소스 타일과 각 작업자의 작업 유형을 결정하지만 어떤 작업자가 어디로 가는지 미세 관리 할 필요는 없음을 명확히하기 위해 질문을 편집했습니다.
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

각 직무에는 a) 중요도 b) 배정 현황 (배정 된 근로자 수)이 있어야합니다.

그러면 근로자는 시간당 가장 "보상"을 제공하는 직업을 결정할 수 있습니다. 보상은 할당 된 근로자 수를 투자해야 할 시간 (걷고 일하는 시간)으로 나눈 중요성으로 계산됩니다. 근로자가 직업 (예 : 나무 자르기)을 전문으로 할 수 있다면 실제로는 효율적으로 할 수있는 일을 선호합니다. 물론 적절한 순간에 작업을 계속할 수있는 경우에만 작업을 배정해야합니다 (예 : 필요한 리소스가 있어야 함).

일부 작업이 오랫동안 취소되지 않도록합니다 (예 : 멀리 떨어져 있기 때문에). 중요성은 시간이 지남에 따라 증가해야합니다. 수확의 중요성은 또한 해당 유형의 자원이 현재 이용 가능한 / 필요한 양에 달려 있어야합니다 (예 : 생산 기간을 요청 된 단위로 나눈 생산 단위).

근로자가 직무를 신속하게 변경하지 못하게하려면 보상이 주어진 임계 값만큼 현저히 향상 될 경우에만 현재 작업을 변경하도록하십시오. 또한 시간당 보상 값을 계산할 때 초기 보행에 대해 두 배의 비용을 적용 할 수 있습니다. 또한, 작업자가 동시에 최적의 작업을 다시 계산하도록해야합니다.

또한 계산 된 보상에 임의성을 추가하십시오. 이것은 노동자들을 다른 직업에 더 잘 분배하게 할 것이다. 그러나이 효과는 근로자에 ​​대한 다음 최적 작업을 직렬로 다시 계산하고 이미 할당 된 근로자 수를 조정함으로써 이미 감소되었습니다 (동일한 일자리에 더 많은 근로자가 예상 보상을 줄임).

작업을 한 근로자에게만 할당 할 수있는 경우 알고리즘을 약간 조정해야 할 수도 있습니다. 이 경우 다음을 수행하십시오. 근로자는 시간당 가장 높은 보상을받는 직업을 선택합니다 (중요성을 개별 시간으로 나눈 값). 다른 근로자가 시간당 더 높은 보상을 받고 동일한 작업을 수행 할 수 있으면 현재 할당 된 근로자를 시작합니다. 새로운 "실직 한"노동자는 다른 직업을 찾으려고 노력합니다. 귀하의 예에서 이것은 다음과 같습니다.

  • "C"는 매우 중요합니다. 그리고 1 번 작업자는 더 멀리 떨어져 있어도 "C"에 자신을 할당합니다.
  • 작업자 2는 다음에 배정되며 "C"에 대해 시간당 더 높은 보상을받습니다 (걷지 않음). 따라서 작업자 1이 작업을 시작하고 "C"에 할당됩니다. 우리는 여전히 동일한 시뮬레이션 시간 조각 내에 있으므로 시간이 들지 않았습니다. 따라서 사용자는이 작업 재 할당을 볼 수 없습니다.
  • 작업자 1은 다른 직업을 찾고 있습니다. 노동자 1은 시간당 보상이 좋지 않기 때문에 "C"에서 노동자 2를 시작하지 않습니다. 따라서 그는 "A"또는 "B"에 할당됩니다 (중요도에 따라) 다시, 이것은 여전히 ​​동일한 시뮬레이션 시간 조각 내에 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.