No.24 "코르티콘으로 시트 할당 구현 (시트 차트)
2017.12.19 Progress Corticon
이 항목은 Assist Co., Ltd. (https : //www.ashisuto.co.jp/product/category/brms/progress_corticon/column/detail/brmstech24.html)의 재 인쇄입니다.
|
이것은 2016 년 4 월부터 Progress 제품을 담당 한 Tanahashi Hiroshi입니다. 연말은 마침내 2017 년에 우리에게 맡겨져 있으며, 연말과 새해 파티를 준비하는 것이 바쁠 것입니다. 나는 이미 11 월 초에 아이를 위해 크리스마스 선물을 사서 집에 숨어 있었기 때문에 휴식을 취하고 있지만 새해 카드를 쓰라는 요청을받은 후 바빠지고 있습니다. 이번에는 연말 또는 새해 파티에 관계없이 매일 바쁜 식당에 대한 "온라인 슬롯 할당 (온라인 슬롯 차트)"에 대해 썼습니다.
온라인 슬롯 사용 가능
오래 전에, 우리는 참가자들보다 작은 원형 의자를 가지고 있었고, 참가자들은 의자 외부를 음악으로 돌았고, 어느 시점에서 휘파람이 의자 위로 두근 거리고 싸우고있었습니다. 이 게임은 "First Come, First Serv"라는 규칙을 기반으로 진행되었지만 점심 시간이나 이자카야에서 처음 봉사 할 수 있습니다. 때때로 나는 여러 사람의 그룹에서 기다릴 때 한 사람이 먼저 앉을 수있는 신비한 규칙을 봅니다. 그러나 기회가 있다면이 효과를 고려할 계획입니다.
이번에는 다음 조건에서 "시트 할당"을 어떻게 생성합니까? 추론 AI : Corticon (Excel이 아님)을 사용하여 이것을 만들려고 노력할 것입니다.
- a)4 명을위한 온라인 슬롯이 있습니다
- b)떠나고 그룹 방문 및마다 앉아
- C)그룹당 방문 순서대로 온라인 슬롯이 개최됩니다
- d)온라인 슬롯 수보다 더 많은 그룹이 없습니다 (위의 경우 최대 사람 수는 4)
- e)그룹의 사람들의 수는 1, 2, 3 및 4이며, 상점을 방문 할 가능성이 동일합니다
- f)NO 0 방문자가 고려됩니다
- g)1 그룹은 온라인 슬롯을 온라인 슬롯을 사용하여 온라인 슬롯을 사용하여 온라인 슬롯을 사용합니다
친숙한 예는 4 석이있는 쇠고기 보울 레스토랑입니다. 1-4 명의 고객이 그룹별로 상점을 방문하여 모든 사람이 동시에 앉을 수있을 때까지 기다립니다. 5 분마다 방을 방문하고 앉으면 15 분이 걸립니다 (턴당 5 분 가정).
나는 고객이 매장에 오지 않는 것에 대해 생각하지 않습니다. 그게 조건입니다. 상상해보십시오.
이것은 아래 5 회전을 시도한 결과입니다.
|
6 턴 동안 열 때 최대 15 번의 회전이 "닫기"로 이어졌습니다. (0 radix)
100% 활용에 이상적인 가치
총 방문자 수 13 x 3 Turns = 39 (이름/회전)
, 그러나 실제로
온라인 슬롯 4 온라인 슬롯 x 15 회전 = 60 (온라인 슬롯/회전)
필요합니다. 이번에는 사람들의 수 = 온라인 슬롯을 고려할 수 있습니다.
60 (온라인 슬롯, 회전) -39 (이름, 회전) = 21 (온라인 슬롯, 회전) 비어있는 온라인 슬롯이 있으며 그룹 #4는 최대 5 턴을 기다려야합니다.
시험 수를 늘리면 몇 가지 추세와 특성이 나타날 수 있습니다. 따라서 코르티콘으로 구현해 보겠습니다.
Corticon과 함께 구현
먼저 어휘를 만듭니다. 각 속성은 나중에 설명됩니다.
|
|
통계 데이터를 얻기위한 속성 이름은 처음에 "_"가 주어졌습니다. 원칙적으로 구현하면 불필요한 속성이됩니다.
다음으로, 규칙은 시행 착오 후 규칙 흐름이 다음과 같이 생성되었습니다.
[shop.erf]
|
|
초기 처리
init 및 make_seat로 하위 흐름을 만들었습니다.
[init.ers]
|
속성은 처리로 초기화되었습니다. 열 0을 사용하고 있습니다.
[make_seat.ers]
|
사용할 온라인 슬롯 만들기.
새 연산자를 사용하여 동적 엔티티를 생성하기 위해 단위 수 (ship.numberofseat)까지 고급 추론 자체 트리거를 반복합니다.
매장 방문 규칙, 주요 처리 - 온라인 슬롯 할당 - 온라인 슬롯 - 방을 떠나십시오.
나는 프로그래밍 언어를 직접 작성하고 있으며 다양한 조건이 적용될 때 "방문 - 방문 - 온라인 슬롯 할당 - 온라인 슬롯 - 온라인 슬롯과 같은 프로세스를 기록하는 것이 종종 더 쉽지만 이번에는 지점에서 조건이 판단되었으므로 방금 썼습니다.
이 "온라인 슬롯 토리"에서, 개막 시간에 도달하면 대기 그룹은 방문을 수락하지 않고 점차 앉아서 약간 복잡한 논리를 초래합니다. 논리는 "개방", "준비"및 "폐쇄"라는 세 가지 상태가있는 Shop.status에 의해 제어됩니다. 개막 시간이 끝나고 상점이 완성 된 후 대기 그룹이 앉아 "준비"라고합니다.
또한 "개방"하위 흐름에 대한 루프가 설정되어 있으며 프로세스는 "닫힌"까지 한 번의 회전으로 반복됩니다.
[in.ers]
|
방문으로 처리됩니다.
먼저, 그룹 방문하는 사람들의 수는 액션 A 라인을 사용하여 처리됩니다. 이 임의의 숫자 생성에 대한 논리는 "No.20 "코르티콘으로 기계 학습 구현"(2017 년 9 월 1 일)|를 사용하여 검증 된 것을 사용하고 있습니다. 수정 사항은 0에 포함되지 않으며 최대 좌석 수는 복권에 의해 선택됩니다. 사람들의 수가 확인되면 새 연산자를 사용하여 그룹의 엔티티를 만듭니다. 수천 또는 수만 번의 턴을 테스트하려면 성능에 영향을 미치므로 고려해야합니다. 이 프로세스는 "열면"만 처리됩니다.
[judge.ers]
|
나중에 볼 수 있듯이 시트에는 비어있는 온라인 슬롯이있는 경우 그룹 번호 (seat_unit.group_number)가 -1로 설정되어 있습니다. 이것은 또한 init.ers로 설정됩니다. 따라서 사용 가능한 온라인 슬롯을 필터링하고 - 크기를 사용하여 사용할 수있는 온라인 슬롯 수를 찾고 대기 그룹 (shop.group_num + 1)을 필터링하여 온라인 슬롯이 가능한지 여부를 결정합니다. 프로그래밍 언어에서는 가능할 때마다 처리를 계속 작성하지만 필터 세트로 원하는 데이터를 기억할 수 없으므로 Shop.judge에 앉은 사람 수를 Shop.group_num에 앉을 사람의 수를 설정하십시오.
[set.ers]
|
앉는 깃발 (shop.judge)이 judge.ers에 설정된 경우에만 앉을 수 있으므로 조건이 shop.judge 0 인 경우 프로세스를 설명합니다. SortedBy와 - 다음을 찾기가 어려울 수 있지만 좌석 그룹에 대한 정보를 좌석 그룹의 사람들 수에 대해 앉을 수 있도록 설정했습니다. 4 명이있는 경우, 그룹에 대한 정보를 4 석재 자리에 앉히고 두 사람이있는 경우 그룹에 대한 정보를 2 개의 좌석으로 좌석으로 설정하십시오. 나는 좌석 수에 대해 SortedBy와 -를 사용하여 반복합니다.
좌석으로 설정할 정보는 그룹 번호 (Ship.group_number) 및 SEAT.status에 사용되는 턴 수로 설정됩니다. 이 시점까지 설정으로 실행하면 영구 루프가되므로 좌석에 대한 그룹 정보를 설정하면 플래그 (Shop.Judge)가 -1로 설정되어 0 이상 반복됩니다. 코르티콘을 사용하는 데 익숙하지 않으면 생각하기 어려운 부분입니다.
[time_past.ers]
|
이 규칙 시트는 단순히 회전 (shop.times)을 증가시킵니다.
[past_group.ers]
|
이 규칙은 통계 처리를위한 것이며 대기 그룹이 있으면 누적 대기 시간 속성 (shop.group_unit._wait_t)이 증가합니다.
그룹은 매 턴마다 방문하지만, 앉은 최종 그룹은 Shop.group_num에 보관됩니다. 이를 위해 Shop.group_num보다 큰 그룹 번호를 필터링하여 누적 대기 시간 속성을 증가시킵니다.
[_past_seat.ers]
|
이 규칙 시트는 통계적 처리에 의해 결정되며, 앉은 온라인 슬롯이 있으면 누적 된 온라인 슬롯이 증가하고 앉으면 앉은 온라인 슬롯 시간이 증가하고 앉으면 온라인 슬롯 시간이 증가하면 _TEMPTY_T가 증가합니다.
[out.ers]
|
이것은 방을 떠나기 위해 처리됩니다.
온라인 슬롯 시간은 shop.seat.status를 사용하여 관리됩니다. Time_past.ers로 1 턴을 전진 시켰으므로 온라인 슬롯 시간을 한 번 줄였습니다. 그것은 당신이 앉은 경우에만 온라인 슬롯을 앉히고 온라인 슬롯을 한 번 줄인다는 것을 결정하는 방법입니다. 그러나 우리가 이번에 구현했을 때, 우리는 종종 약간 더 많은 압제적인 방법을 사용합니다 : 모든 온라인 슬롯의 시간에서 온라인 슬롯 시간을 한 번 줄이고 비어있는 온라인 슬롯이있을 때 온라인 슬롯의 가치를 설정합니다. 다시 말해, 우리는 지배적 인 방법을 채택 할 수 있도록 데이터 구조를 고려할 것입니다.
[past.ers]
|
최종 프로세스는 매장의 상태를 결정하는 것입니다. 기본 회전이 끝나면 "준비 중"으로 변경하고 그룹이없고 온라인 슬롯에 고객이 없으면 닫을 것입니다. 이번에는이 규칙을 만들 때 대기 그룹이 사라지면 가격이 "폐쇄"되고 가격이 이상 할 것이라고 걱정했습니다. 나는 대기 그룹이 없더라도 식당 내부에서 먹는 고객이 있었음에도 불구하고 조명을 끄야한다고 후회했다.
그 후 처리가 완료되지만 통계를 계산하기위한 규칙 시트를 추가했습니다.
[Statistics.ers]
|
집계 값의 최대 값, 최소 및 평균값은 Corticon의 연산자를 사용하여 계산됩니다.
확인
이 기사의 시작 부분에서 테스트 한 5 턴에 4 개의 온라인 슬롯이있는 경우를 해보자.
|
한 그룹의 사람들의 수는 동일한 확률로 생성되지만, 4 개의 그룹의 수가 증가함에 따라 온라인 슬롯 수가 가득 차고 대기하므로 결과적으로 온라인 슬롯은 더 이상 3 회전으로 열리지 않고 18 턴으로 닫힙니다.
처음에 테이블에 표시된 대로이 결과를 요약합시다.
|
온라인 슬롯을 할당하는 방법에 대한 특별한 통제가 없으므로 온라인 슬롯 2가 가장 높은 우선 순위로 할당되며 온라인 슬롯 3은 최우선 우선 순위로 할당됩니다.
통계를 확인했을 때
그룹의 평균 사람들 수 (_ave_group_num)는 약 2.83이며 거의 짝수입니다.
평균 그룹 대기 시간 (_ave_group_wait)은 5 턴입니다. 한 번의 회전이 5 분이면 약 25 분이면 조금 더 길어집니다.
평균 온라인 슬롯 가용성 (_ave_seat_empty)은 5.25 턴입니다.
평균 온라인 슬롯 점유 시간 (_ave_seat_occupy)은 12.75 턴입니다.
최대 그룹 대기 시간 (_max_group_wait)은 10 턴입니다. 한 번의 회전이 5 분이면 50 분이면 매우 길다.
최대 누적 온라인 슬롯 자유 시간 (_max_seat_empty)은 9 턴이고 온라인 슬롯 3이 적용됩니다.
최대 누적 온라인 슬롯 점유 (_max_seat_occupy)는 18 턴이고 온라인 슬롯 2는 다음과 같습니다.
그룹의 사람들의 수는 무작위로 생성되기 때문에 동일한 조건에서 비교할 수 없지만 온라인 슬롯 수를 두 배로 늘리기 위해 "그룹의 평균 사람들 수"를 지표로 사용해보십시오. 숫자를 8으로 변경하고 실행하십시오. 여러 번 실행 한 후 그룹의 평균 인력 (_AVE_GROUP_NUM)은 약 2.67 명입니다.
|
|
온라인 슬롯 번호에 대한 할당은 정확하지 않습니다. 이것을 이미지로 만 가져 가십시오.
평균 그룹 대기 시간 (_AVE_GROUP_WAIT)은 0.6 턴, 최대 그룹 대기 시간 (_MAX_GROUP_WAIT)은 1 턴이며 준비 시간은 3 턴이며 작동 속도는 약 66%입니다.
끝에서 실제 상점을 가정합니다
회전 수 : 72 턴, 30 석, 최대 그룹 : 6 명, 온라인 슬롯을 차지하는 시간은 4 턴입니다.
|
생성 된 엔티티의 자세한 이미지는 생략되며 통계 만 표시됩니다.
그룹의 평균 사람들 수 (_AVE_GROUP_NUM)는 3.76이고 대기 시간은 0이지만 준비는 3 턴이 있었고 점유율은 약 50%로 관리자에게는 어려운 수치가되었습니다.
|
수십 번의 시도 후, 높은 평균 그룹의 사람들과 데이터가 만들어졌습니다. 시험 수가 증가함에 따라 그룹의 수는 평균에 접근하여 높은 가치를 얻기가 어렵습니다.
그룹의 평균 사람들 수 (_AVE_GROUP_NUM)는 3.9이고 대기 시간은 0이지만, 대기 시간은 우수하지만, 4 턴은 준비되어 있으며 점유율은 약 50%이며 관리자에게는 힘든 수치가 남아 있습니다.
온라인 슬롯 수를 20으로 줄이자.
|
그룹의 평균 인력 (_AVE_GROUP_NUM)은 평균 최대 대기 시간이 1이지만 운영 속도는 70%이상에 도달했습니다. 반면에 준비 횟수는 5 턴으로 증가했습니다. 비즈니스 소유자로서 저는 이것이 많은 숫자라고 생각합니다.
이번에는 온라인 슬롯 일정은 턴당 하나의 그룹을 할당하는 것이며 그룹 온라인 슬롯에 사용할 수있는 온라인 슬롯 수가 비교되며 "그룹은 동일한 테이블에 앉을 것"또는 "공유 온라인 슬롯이 없음"과 같은 요청이 구현되지 않았습니다. 기회가 있다면 이런 종류의 구현을 다시 구현하고 싶습니다.