JavaFX アプリケーション

JavaFX 11以上、Scene Builder、Eclipse を利用して


正比例に近い整数による配分の利用方法

最新は1.2版です。

(正比例に近い)整数による配分の種々の解(ハミルトン法、アダムズ法、ディーン法、ヒル法、ウェブスター法、ジェファーソン法)を(優先法または除数法として)求める。整数による配分とそれぞれの解に関しては「公平のあり方」(大学教育出版)を参考にして下さい。また、「優先法と除数法の関係」に関してはこちらも参照して下さい。

正比例に近い整数による配分

分割できない$A$個の資源がある。これを$n$人のプレイヤー;$1, 2, \cdots, n$、になるべく正比例に近く配分したい。いかに配分すればよいか?

利用方法

データの入力

データの「入力」タブでは、まず、(必要ならば)プレイヤーの人数をコンボボックスを利用して変更する。次に、配分すべき資源の個数$A$、各プレイヤーの要求量$d$を正の整数で入力する。

解の計算

「Hamilton法」から「Jefferson法」タブでは(「Adams法」から「Jefferson法」では優先法として)解を求めている。複数の解がある場合も、それら全てを求めている。

「計算(除数法)ウィンドウの表示」ボタンを押すと、Adams法からJefferson法の解を除数法として求めるためのウィンドウが表示される。求める方法、除数(x)(の初期値)、増分、個数を設定して、「計算」ボタンを押すことで、除数として、初期値から始め、増分を増やして、個数分だけ変化させた時の各配分が計算される。ただし、Hill法の場合は除数の2乗を設定する。増分も除数の2乗の増分である。「和」の列の値が配分すべき資源の個数に一致すれば、その行の配分が求める解である。

例1

次の問題を解く。
$A=10$、$d=(19,17,7,5)$。

「入力」タブで、「配分すべき資源」を「10」個にし、各プレイヤーの要求量を入力する。例えば、「まとめ」タブを押すと、全ての解が表示される。

例1
例1
例1 まとめ
例1 まとめ

例えば、「Webster法」タブを押すと、優先度が表示され、大きい順にそれらを選んで、優先法として解$(4,4,1,1)$を求めることができる。「表示」メニューから「小数(D)」を選ぶと、数値の大小が分かり易い。これを除数法を利用して求める。まず、このウィンドウの「優先法として解を求める」の右上に表示されている除数xの値を記憶する。(どれくらい詳しく記憶するかは、問題によって変わるが、ここでは4.8と記憶しておく。)

例1 Webster法(優先法として求める)
例1 Webster Priority

「計算(除数法)ウィンドウの表示」ボタンを押すと、「除数法」ウィンドウが表示される、左上のコンボボックスから「Webster法」を選び、除数の初期値、増分、個数を、「4.6」、「0.2」、「3」と設定し、「計算」ボタンを押す。

例1 Webster法(除数法として求める)
例1 Webster Divisor

表示された表の2行目の除数が4.8の時の行が(右にある「和」の列の値が配分すべき資源の個数10個に一致するので)答え(4,4,1,1)である。

例2

次の問題を解く。
$A=9$、$d=(2,4,5,7)$。

「入力」タブで、「配分すべき資源」を「9」個にし、各プレイヤーの要求量を入力する。例えば、「Hamilton法」タブを押すと、その解が表示される。

例2
例2
例2 Hamilton法
例2 Hamilton

この例の場合、2通りの解があり、Hamilton法1とHamilton法2の行に表示される。「まとめ」タブを押すと、全ての方法による解が表示される。

例2 まとめ
例2 まとめ
例2 Webster法(優先法として求める)
例2 Webster Priority

この例では、Webster法にも2通りの解があることが分かる。これらを除数法を利用して求める。まず、「Webster法」タブの「優先法として解を求める」の右上に表示されている除数xの値を記憶する。(どれくらい詳しく記憶するかは、問題によって変わるが、ここでは2と記憶しておく。)「計算(除数法)ウィンドウの表示」ボタンを押すと、「除数法」ウィンドウが表示される、左上のコンボボックスから「Webster法」を選び、除数の初期値、増分、個数を、「1.9」、「0.1」、「3」と設定し、「計算」ボタンを押す。

例2 Webster法(除数法として求める)
例2 Webster Divisor

表示された表の3行目と4行目の除数が2の時の行が(右にある「和」の列の値が配分すべき資源の個数9個に一致するので)答え(1,2,3,3)と(1,2,2,4)である。d/xが境界上にあるので、一方を大きい方、他方を小さい方に丸めた。(この例では、2以外の除数では答えが出ない。)

例3(Hill法)

次の問題を解く。
$A=7$、$d=(19,17,16,16)$。

例3 Hill法(複数の解がある場合、優先法として求める)
例3 Hill Priority

「入力」タブで、「配分すべき資源」を「7」個にし、各プレイヤーの要求量を入力する。「Hill法」タブを押すと、その解が表示される。優先度r(d,a)を大きい方からとると、第7番目に2通りあり(2通りの解が)あり、Hill法1とHill法2と示されていることが分かる。これらを除数法を利用して求める。まず、「Hill法」タブの「優先法として解を求める」の右上に表示されている除数xの2乗の値を記憶する。(どれくらい詳しく記憶するかは、問題によって変わるが、ここでは128と記憶しておく。)「計算(除数法)ウィンドウの表示」ボタンを押すと、「除数法」ウィンドウが表示される、左上のコンボボックスから「Hill法」を選び、除数の2乗の初期値、増分、個数を、「127.9」、「0.1」、「3」と設定し、「計算」ボタンを押す。

例3 Hill法(複数の解がある場合、除数法として求める)
例3 Hill Divisor

表示された表の3行目と4行目の除数の2乗が128の時(除数が11.31370…の時に対応する)の行が(右にある「和」の列の値が配分すべき資源の個数7個に一致するので)答え(2,2,2,1)と(2,2,1,2)である。d/xが境界上にあるので、一方を大きい方、他方を小さい方に丸めた。(この例では、128以外では答えが出ない。)

複数個の解を持たない、次の問題を解く。
$A=7$、$d=(19,17,16,14)$。

優先法と除数法による解法は次の通りである。ここでは、除数の2乗の初期値、増分、個数を、「99.9」、「0.1」、「3」と設定した。

例3 Hill法(複数の解を持たない場合、優先法として求める)
例3 Hill2 Priority
例3 Hill法(複数の解を持たない場合、除数法として求める)
例3 Hill2 Divisor

これら3つの除数のどれでもが解である配分(2,2,2,1)を与えた。

例4(Dean法)

Dean法に複数の解がある、次の問題を解く。
A=9、d=(2,4,7,10)。

結果だけを記す。解は、(1,2,3,3)と(1,2,2,4)の2つである。2+11/12以外の除数では除数法により解が求まらない。

例4 Dean法(優先法として求める)
例4 Dean Priority
例4 Dean法(除数法として求める)
例4 Dean Divisor

例5(Adams法)

Adams法にも複数の解がある、例3に出てきた次の問題を解く。
$A=7$、$d=(19,17,16,16)$。

例5 Adams法(優先法として求める)
例5 Adams Priority
例5 Adams法(除数法として求める)
例5 Adams Divisor

除数が16の時、プレイヤーCとDのd/xは共に1となり、小数部分がないので、切上げても1となるので、配分する資源の総量は和の6個になる。除数を少し小さくし、例えば、15.999にすると、d/xは共に1を少し超え、切上げると共に2となり、配分する資源の総量は和の8となり、2だけジャンプし、7個丁度にならない。従って、CまたはDの一方を「調整」し(1個ではなく)2個配分することにする。「優先法と除数法の関係」に関してはこちらも参照して下さい。

例6(Jefferson法)

Jefferson法にも複数の解がある、例4に出てきた次の問題を解く。
$A=9$、$d=(2,4,7,10)$。

例6 Jefferson法(優先法として求める)
例6 Jefferson Priority
例6 Jefferson法(除数法として求める)
例6 Jefferson Division

除数が2の時、プレイヤーAとBとDのd/xは1、2、5となり、小数部分がないので、切捨てても1、2、5となるので、配分する資源の総量は和の11個になる。除数を少し大きくし、例えば、2.001にすると、d/xは共に1、2、5を少し下回り、切捨てると0、1、4となり、配分する資源の総量は和の8となり、3だけジャンプし、9個丁度にならない。従って、A、B、Dの中から2人を選び「調整」し本来配分する値よりも1個少なく配分することにする。「優先法と除数法の関係」に関してはこちらも参照して下さい。