크로와상을 사는 것이 누구의 차례인지 알아보십시오


9

한 팀은 매일 아침 누군가가 모두에게 크로와상을 가져와야한다고 결정했습니다. 매번 같은 사람이되어서는 안되므로 다음 차례를 결정하는 시스템이 있어야합니다. 이 질문의 목적은 내일 크로와상을 가져올 차례를 결정할 알고리즘을 결정하는 것입니다.

제약, 가정 및 목표 :

  • 크루아상을 가져 오는 것이 누구의 차례인지 전날 오후에 결정됩니다.
  • 어느 날, 어떤 사람들은 결석합니다. 알고리즘은 그 날에 참석할 사람을 선택해야합니다. 모든 결석을 하루 전에 미리 알고 있다고 가정하면 크루아상 구매자는 전날 오후에 결정할 수 있습니다.
  • 전반적으로 대부분의 사람들이 대부분의 날에 참석합니다.
  • 공정성을 위해 모든 사람은 다른 사람보다 크루아상을 구입해야합니다. (기본적으로 모든 팀원은 크로와상을 쓸 돈이 같다고 가정하십시오.)
  • 명단의 지루함을 완화하기 위해 임의의 요소 또는 적어도 인식 된 임의성을 갖는 것이 좋을 것입니다. 이것은 어려운 제약이 아닙니다 : 심미적 인 판단에 가깝습니다. 그러나 같은 사람을 연속으로 두 번 선택해서는 안됩니다.
  • 크로와상을 가져 오는 사람은 미리 알아야합니다. 따라서 사람 P가 D 일에 크로와상을 가져 오려면 사람 P가있는 전날에이 사실을 결정해야합니다. 예를 들어, 크로와상 수상자가 항상 전날 결정되면, 그것은 전날에 참석 한 사람 중 한 사람이어야합니다.
  • 팀원의 수는 스토리지 및 컴퓨팅 리소스가 사실상 무제한이 될 정도로 적습니다. 예를 들어, 알고리즘은 과거에 크루아상을 가져온 사람의 완전한 역사에 의존 할 수 있습니다. 매일 빠른 PC에서 최대 몇 분의 계산이 가능합니다.

이것은 실제 문제의 모델이므로 시나리오를 더 잘 모델링한다고 생각되면 가정에 자유롭게 이의를 제기하거나 구체화 할 수 있습니다.

원산지 : 크로를 구입하려고 누가 알아 의해 플로리안 Margaine . 나의 개혁은 요구 사항이 약간 다릅니다.


1
질문은 정확히 무엇입니까? 사람들이 거의 같은 금액이 없다고 가정 할 수 있습니까? 이것을 가장 적게 한 사람, 또는 단순히 임의의 사람을 취하는 것은 무엇이 문제입니까?
Pål GD

@ PålGD 사람들이 거의 같은 금액으로 결석한다고 가정하면 단순화됩니다. 원하는 경우 수행하지만 알고리즘이 시간제에 적합하면 더 좋습니다. 이 작업을 최소 횟수로 수행 한 사람을 선택하는 것이 하나의 솔루션입니다 (하루 전에 미리 알아야한다는 요구 사항을 염두에 두더라도 솔루션이 완전히 사소한 것은 아닙니다). 임의의 사람도 일할 수 있지만, 임의성은 사용자가 구속하고 싶은 공정성과의 편차를 유발합니다.
Gilles 'SO- 악마 그만해'

뭐? 침 사진이 없습니까? 빵집으로 나가는 대신 수학을 하는 책상에서 노예가 되길 원 하십니까?
Caleb

@Gilles-참고 로이 질문 의 버전으로 P.SE에서 실험을 진행하십시오 . 두 사이트가 조금 오래되었으므로 각 커뮤니티의 답변이 어떻게 형성되는지 궁금합니다.

답변:


7

내가 알고있는 이런 종류의 문제에 대한 두 가지 범주의 솔루션이 있습니다 : 바이어스 복권필터링 / 생성 된 랜덤 시퀀스 .

먼저 상태를 유지하지 않는 쉽고 잘못된 솔루션을 배제합시다. 상태를 유지하지 않는 복권 스타일 솔루션은 이항 분포에서 승리 횟수를 가지게되며 "다수"기준에 실패합니다. 모든 사람들을 똑같이 골라내는 무작위 순서를 선택할 수 있습니다 (목록 주위를 돌아 다니면 순열이 무작위를 제공합니다). 일단 사람들이 휴가를 시작하면 순서에 구멍이 생깁니다. 추적하지 않으면 평등 한 노력을 유지하는 대신 이항 분포를 다시 찾을 수 있습니다.

또한 실제 무작위성을 가지겠다고 약속합시다. 예를 들어, 결정적 알고리즘을 기반으로 휴가를 예약 할 수 없도록 크로와상을 구입할 차례가 될 때 절대로 휴가를 예약 할 수 없도록하기를 원할 수 있습니다 (휴가 일을 모두 사용하기 전까지는 가정합니다) .

따라서 두 가지 유형의 솔루션으로 넘어갑니다.

  1. 치우친 복권을 구성하기 위해, 우선 우리는 복권에 대한 숫자를 생성하기 위해 거의 모든 연속 분포 (유한 편차)를 선택할 수 있습니다 . 패자는 숫자가 가장 낮은 사람이 될 수 있습니다. 그런 다음 가장 간단한 편견은 각 개인이 자신의 지분보다 더 많거나 적은 것을 구입했는지 여부를 추적하는 것입니다. 크루아상 단위로 바이어스를 측정 할 수 있습니다. 분포의 너비와 모양을 변경하여 임의의 정도를 조정할 수 있습니다. 이는 또한 개인이 "같은 횟수"에서 얼마나 멀리 떨어져 있는지를 결정합니다. 가우스는 쉽습니다. 그들은 너무 긴 꼬리 ( "불공정")를 가지지 않고 합리적인 놀라움을 허용합니다. 솔루션의 기본 형태는 (스칼라 코드에서)

    case class Employee(var bias: Double) {
      def eat         { bias -= 1 }
      def buy(n: Int) { bias += n }
      def roll        = bias + stdev * Random.nextGaussian
    }
    

    10*stdev휴가 구조로 모든 사람이 "마지막"으로 구매할 수있는 최첨단 사례에서 사람들이 마지막으로 구매 한 사람을 추적하고 무거운 편향 보너스 (예 :)를 줄이면서 사람들이 연속으로 두 번 구매하는 것을 막을 수 있습니다. (즉, 구입 한 다음 휴가를 가십시오.) 그들이 선택한 날에 존재하지 않는 것과 같은 것. (매일 다른 사람이 결석하면 편견 보너스를 통해 화상을 입을 때 결국 나타 납니다 . 나는 이것이 버그가 아닌 기능이라고 생각합니다.)

    따라서 현재의 직원 목록을 수집하여 복권에 출연시키고 가장 낮은 순위를 선택하고 업데이트하십시오. 구매 보너스를 직원 수 (비용은 무시할 수 있지만 크루아상을 얻는 여행은 부담이 많을 때 좋은), 직원 수 (여행이 쉽지만 비용이 부담이되는 경우)와 같을 지 여부를 선택할 수 있습니다. ) 또는 그 사이에있는 항목 (두 가지 부담을 모두 인정하기 위해). 참석 한 사람들에게만 "먹는"페널티를받는 것이 더 나을 수도 있지만, 휴가 중이라고해서 올바른 피치를 얻지 못한다고 생각하는 경우 어느 쪽이든 할 수 있습니다.

  2. 필터링 된 무작위 시퀀스를 구성하려면 먼저 무작위 시퀀스를 생성해야합니다. 직원 목록을 섞는 것은 시작하는 좋은 방법입니다. 매일 순서대로 목록을 살펴보십시오. 결석했거나 전에 말하거나 구입할 수 없어서 구매할 수없는 사람은 건너 뜁니다. 이제 문제가 있습니다. 건너 뛴 사람들을 모으고 있습니다. 그래도 괜찮습니다. 순서가 끝나면 셔플 링하기 전에 건너 뛴 직원 목록을 전체 목록에 추가하십시오. 이제 올 확률은 건너 뛴 횟수에 비례하여 "같은 횟수"속성을 유지합니다.

    표준 셔플을 사용하는 경우 휴가가 없을 때 임의성을 정량화하는 것이 특히 쉽습니다. 사람들을 완전히 무작위로 골랐다면, 다음에 가져올 사람에 대한 지식에는 명의 직원 이 있다면 비트의 정보가 포함됩니다 . 그러나 대신 대신 가능한 시퀀스가 ​​허용되므로 정보는 만큼 줄어 듭니다 비트 (대형 경우 의 경우 )log2(N)NN!NNlog2[(N!NN)1/N]1log(2)+log22π/NN1.4NN=10 1.14

나는 무작위성에 대한 통제가 더 좋기 때문에 편견 복권 솔루션을 선호합니다. 필터링 된 시퀀스를 사용하면 시퀀스를 생성하는보다 복잡한 방법을 찾을 수 있습니다. 예를 들어, 임의 순열을 사용하지 않고 특정 거리로 로컬 스왑을 수행하거나 풀에서 사람을 완전히 스왑 할 수 있지만 건너 뛰기 목록으로 이동하지만 이러한 작업에는 더 많은 알고리즘 노력이 필요합니다. 복권을 사용하면 표준 편차 만 조정하면됩니다.


4

을 크루아상 바이어 세트라고 합시다 . 보자 에 의해 지출 금액 하루에 크로 최대에 그들이 항상 안되는 사람들의 수가 제시에 상관없이 같은 돈을 지출하는 경우 (그가 크로 구매 횟수 될 수 있습니다 크로와상 애호가에게는 영리하게 보입니다.) 는 초기화과 의해 피 분할이다 .{P1,...,Pn}vik1Pik10

일부 매개 변수 경우 .lvk=i=1n(vik)l

일째에 , 확률 결과 를 생성 하는 임의의 변수를 발사하여 다음 날 크로의 구매자를 선택합니다 . 선택한 것이 여기에 없으면 (오늘 또는 다음 날) 그들은 적합한 것을 찾을 때까지 동전을 다시 던집니다.ki1(vik)lvk

그리고 그들은 그 겁쟁이 인 이 2 일 만에 있었다는 것을 알 때까지 행복하게 살았습니다 .P1

약간의 고찰 (그리고 에 대해 약간의 고문이 지불하지 않고 먹는 크로와상을 환불 할 수 있음)은 알고리즘을 수정합니다.P1

그들은 매일 지불하는 크루아상의 평균 가격을 계산하고 라고 부릅니다 .v

첫날 그들은 앞으로 며칠 동안 구매자의 계획을 계산합니다. 그들은 확률 변수와 이전과 같이 할 수 있도록 수행하고 업데이트 그들이 일에 지불해야하는 가격 추가, 즉 그들이 계획 때마다하는 것은 베이커로 이동합니다. 그들은 영리하고 너무 많은 비용을 지불하고 싶지 않기 때문에 일에 실제로 지불 한 금액을 기억 하여 계획을 업데이트 할 때 아무도 처벌받지 않습니다.vikkvk

그들은 모든 가 미래에 크로와상을 사야 할 날짜가 있을 때까지 계획 합니다.Pi

경우 일에 크로 사기 위해 계획되었다 하지만 그는 하루에 수 없다고 발표 (그는 예열하지 않은 경우 나) 그 다음날 예를 들어 의무가 없습니다 누군가 현재까지 그의 장소 제공 그가를 의 다음 차례를 가져 가라 .Pik+1kPjPj

의 첫 번째가 미래에 크루아상을 구매할 계획이 아닌 날 , 그들은 모든 사람이 돌아올 때까지 계획을 연장합니다 ( 계산 된 임의 변수 가 지불 한 실제 금액과 계획된 금액으로 업데이트 됨) 줄에.Pivik

그리고 이것이 영원히 간다면 그들은 크루아상의 가격과 똑같이 행복하게 살고 있습니다.

그러나 은 행복하지 않습니다. 실제로, 그는 선택한 이 너무 작아서 두 번 연속으로 지불 할 확률이 너무 크다고 생각합니다 . 무엇이든 ... 다른 사람은 그를 선택할 수 자신이 원하는대로 큰있다. 그는 심술하지만 바보가 아니기 때문에, 그는 선택 큰 지불 작은 선수들 사이의 비율이 큰 볼 수없는 경향이 경우에도 시간의 통과로 그 방법을 을 강조하는 경향이있다.P1lll=kl

여전히 은 그리 행복하지 않습니다. 그는 반나절 (크루아상의 절반) 밖에 없으며 매일 여기있는 만큼 지불해야 합니다. 불공정!P1P2

그러나 그들은 심술 P은 질려서 멀리 쫓아 갔다. 그러나 그들의 머리 구석에서 그들은 여전히 지불 한 것과 먹는 것 (양수 값을 얻기 위해 정규화 된 것)의 차이에서 를 변경하려고 생각하고 있지만 너무 게으르고 크로와상으로 가득합니다.P1vik

추신 : 나쁜 영어에 대한 미안하지만 나는 원어민이 아니며 늦었습니다 ... 실수를 바로 고쳐주세요 (그리고 이야기에 향신료를 더할 수 있습니다 ...)


2

당신이 가진 모든 반복

  • 참석하여 구매할 수있는 사람들의 목록
  • 이전 구매자

목록의 사람들 중에서 무작위로 사람을 선택하고 이전 구매자를 제외하면 다음과 같은 목표를 달성 할 수 있습니다.

  1. 우리가 사용으로 알고리즘은 "최대한"무작위 최소의 이전 반복에서 정보의 양을 무작위로 선택합니다.
  2. 평균적으로 사람들은 알고리즘을 가능한 한 공정하게 만드는 추출에 참여할 때마다 (N / (N-1)) 크로와상을 지불합니다.
  3. 나는 이것을 최대한 무작위로 만들기 위해 반복하지 않는 규칙을 제거하는 것이 좋습니다.

내가 제안한 다른 알고리즘은 덜 무작위 적이거나 덜 공정합니다.

  1. "데크 셔플"알고리즘은 지불해야 할 확률이 일정하지 않다는 점에서 실제로 무작위가 아닙니다 (첫 번째 선택의 경우 1 / N, 두 번째 선택의 경우 1 / (N-1) ... N 번째 선택의 경우 1- -아직 선택하지 않은 경우). 또한, 당신이 먼저 선택되면, 당신은 다음 N 번에 대해 정확하게 선택 될 기회가 없습니다. 시스템은 선택 될 때까지 그리고 거의 끊임없이 들어 와서 쉽게 고장납니다.

  2. 난수의 속성에 의존하는 대신 모든 사람이 동일한 수의 크로와상을 얻도록하는 "보상"알고리즘은 난수이거나 공정하지 않습니다 (또는 둘 다).


함께 사람과 하루 평균에있는 직원, 횟수의 편차는 약이 될 것입니다 . 솔루션이 이상을 벗어나지 않는 솔루션이 존재하기 때문에 이것은 "공정한"의 이상한 정의입니다 (특히 "다수"로 지정 되었기 때문에). NmN/m1
Rex Kerr

N물론 구매하지 않습니다.
렉스 커

@RexKerr 왜 직원보다 크로와상을 더 많이 사시겠습니까?
Sklivvz

혼란 스러워요. 내가 어디에서 제안 했습니까?
Rex Kerr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.