IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝情報システム株式会社の特許一覧

特許7079546擬似乱数生成装置及び擬似乱数生成プログラム
<>
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図1A
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図1B
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図2
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図3
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図4
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図5
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図6
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図7
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図8
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図9
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図10
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図11
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図12
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図13
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図14
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図15
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図16
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図17
  • 特許-擬似乱数生成装置及び擬似乱数生成プログラム 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-25
(45)【発行日】2022-06-02
(54)【発明の名称】擬似乱数生成装置及び擬似乱数生成プログラム
(51)【国際特許分類】
   G06F 7/58 20060101AFI20220526BHJP
   G09C 1/00 20060101ALI20220526BHJP
【FI】
G06F7/58 620
G09C1/00 650B
【請求項の数】 18
(21)【出願番号】P 2018168348
(22)【出願日】2018-09-07
(65)【公開番号】P2020042453
(43)【公開日】2020-03-19
【審査請求日】2021-01-22
(73)【特許権者】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100090169
【弁理士】
【氏名又は名称】松浦 孝
(74)【代理人】
【識別番号】100074147
【弁理士】
【氏名又は名称】本田 崇
(74)【代理人】
【識別番号】100124497
【弁理士】
【氏名又は名称】小倉 洋樹
(72)【発明者】
【氏名】岩野 隆
【審査官】白石 圭吾
(56)【参考文献】
【文献】特開2003-152706(JP,A)
【文献】特開2010-237735(JP,A)
【文献】岩野 隆 Takashi IWANO,一次元写像を用いた擬似乱数生成におけるパラメータ可変の効果について On the Study of the Effect of Variable Parameter in Pseudo Random Number Generation using 1-Dimensional Mapping,電子情報通信学会技術研究報告 Vol.106 No.594 IEICE Technical Report,日本,社団法人電子情報通信学会 The Institute of Electronics,Information and Communication Engineers,2007年03月08日,第47-51頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/58-7/72
G09C 1/00-5/00;H04K1/00-3/00;H04L9/00-9/04
(57)【特許請求の範囲】
【請求項1】
テント写像による写像演算を行うテント写像演算手段と、
前記テント写像を整数演算で可能とするために、前記テント写像の最大区間を整数倍するときの素数Pを用いた式(P-1)/2が素数であるかを検出し、(P-1)/2が素数でない場合には(P-1)/2を素因数分解して素因数を求め、(P-1)/2が素数であるかまたは前記素因数が所定条件式を満たすかに基づき、当該素数Pを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段と、
前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段と
を具備することを特徴とする擬似乱数生成装置。
【請求項2】
前記テント写像パラメータ選択手段は、(P-1)/2が素数である場合には、Pを選択することを特徴とする請求項1に記載の擬似乱数生成装置。
【請求項3】
前記テント写像パラメータ選択手段は、(P-1)/2を素因数分解して求めた素因数Cmにより算出されたKmにより作成した条件式Km≦(log2P-1)が成り立つ場合に、Pを選択することを特徴とする請求項1に記載の擬似乱数生成装置。
【請求項4】
前記テント写像パラメータ選択手段は、2Km±1≡0(mod P)の成立を判定し、成立する場合には当該Pを用いないことを特徴とする請求項3に記載の擬似乱数生成装置。
【請求項5】
前記テント写像演算手段がテント写像の1周期分演算を行う毎に、前記テント写像パラメータ選択手段から新たなPを与えるように制御するパラメータ遷移制御手段を具備することを特徴とする請求項1乃至4のいずれか1項に記載の擬似乱数生成装置。
【請求項6】
前記乱数生成手段は、テント写像による写像結果を順次並べて、乱数とすることを特徴とする請求項1乃至5のいずれか1項に記載の擬似乱数生成装置。
【請求項7】
前記テント写像演算手段は、2系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、
前記乱数生成手段は、各テント写像毎に1系列から1ビットずつ、合計2ビットを得る処理を繰り返し、並べて所定長の乱数列とすることを特徴とする請求項1乃至6のいずれか1項に記載の擬似乱数生成装置。
【請求項8】
前記テント写像演算手段は、3系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、
前記乱数生成手段は、各テント写像に第1の系列から所定ビット、第2の系列から所定ビット、第3の系列から所定ビットを得て、並べて所定長の乱数列とすることを特徴とする請求項1乃至6のいずれか1項に記載の擬似乱数生成装置。
【請求項9】
前記乱数生成手段は、テント写像演算の結果と前記Pの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とすることを特徴とする請求項1乃至8のいずれか1項に記載の擬似乱数生成装置。
【請求項10】
コンピュータを、
テント写像による写像演算を行うテント写像演算手段、
前記テント写像を整数演算で可能とするために、前記テント写像の最大区間を整数倍するときの素数Pを用いた式(P-1)/2が素数であるかを検出し、(P-1)/2が素数でない場合には(P-1)/2を素因数分解して素因数を求め、(P-1)/2が素数であるかまたは前記素因数が所定条件式を満たすかに基づき、当該素数Pを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段、
前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段
として機能させることを特徴とする擬似乱数生成プログラム。
【請求項11】
前記コンピュータを、前記テント写像パラメータ選択手段として、(P-1)/2が素数である場合には、Pを選択するように機能させることを特徴とする請求項10に記載の擬似乱数生成プログラム。
【請求項12】
前記コンピュータを、前記テント写像パラメータ選択手段として、(P-1)/2を素因数分解して求めた素因数Cmにより算出されたKmにより作成した条件式Km≦(log2P-1)が成り立つ場合に、Pを選択するように機能させることを特徴とする請求項10に記載の擬似乱数生成プログラム。
【請求項13】
前記コンピュータを、前記テント写像パラメータ選択手段として、2Km±1≡0(mod P)の成立を判定させ、成立する場合には当該Pを用いないように機能させることを特徴とする請求項12に記載の擬似乱数生成プログラム。
【請求項14】
前記コンピュータを、前記テント写像演算手段がテント写像の1周期分演算を行う毎に、前記テント写像パラメータ選択手段から新たなPを与えるように制御するパラメータ遷移制御手段として機能させることを特徴とする請求項10乃至13のいずれか1項に記載の擬似乱数生成プログラム。
【請求項15】
前記コンピュータを、前記乱数生成手段として、テント写像による写像結果を順次並べて、乱数とするように機能させることを特徴とする請求項10乃至14のいずれか1項に記載の擬似乱数生成プログラム。
【請求項16】
前記コンピュータを、前記テント写像演算手段として、2系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返すように機能させ、
前記コンピュータを、前記乱数生成手段として、各テント写像毎に1系列から1ビットずつ、合計2ビットを得る処理を繰り返し、並べて所定長の乱数列とするように機能させることを特徴とする請求項10乃至15のいずれか1項に記載の擬似乱数生成プログラム。
【請求項17】
前記コンピュータを、前記テント写像演算手段として、3系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返すように機能させ、
前記コンピュータを前記乱数生成手段として、各テント写像に第1の系列から所定ビット、第2の系列から所定ビット、第3の系列から所定ビットを得て、並べて所定長の乱数列とするように機能させることを特徴とする請求項10乃至15のいずれか1項に記載の擬似乱数生成プログラム。
【請求項18】
前記コンピュータを、前記乱数生成手段として、テント写像演算の結果と前記Pの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とするように機能させることを特徴とする請求項10乃至17のいずれか1項に記載の擬似乱数生成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、擬似乱数生成装置及び擬似乱数生成プログラムに関するものである。
【背景技術】
【0002】
従来、一次元写像(テント写像やロジスティック写像)による疑似乱数生成方法がいくつか提案されている。これらは一次元写像による写像の度に値を乱数として取得していくものである。しかしながら、有限演算精度実装では、演算精度の割には、かなり短い周期帯に入ることで乱数性能が悪くなるといった問題がある。このため系列を変動させる機構を取り入れ長周期化を図り、乱数性能を向上させるといった工夫を施している。
【0003】
従来の一次元写像による乱数生成において周期を延長するためには、乱数生成系列を自己フィードバックしたり外部からの不確定な系列で撹乱したりするものであった。従ってこのような乱数生成手法では、理論的に一度出力された同じ値は出力することが無いといった一様性の保証は得られなく、数値に偏りが生じた場合に乱数性が悪くなってしまう懸念を含んでいた。また、最大周期長の見積もりも確定的に行えないといった問題があった。
【0004】
特許文献1には、周期性を考慮したカオス的乱数列の発生装置が開示されている。この特許文献1では一次元写像による乱数生成方法において周期を巧妙に延長する手段が紹介されているが、一様性の保証面の言及がなされておらず、周期長の延長に限界がある。
【0005】
また、一周期内で一様な乱数が得られるものとしては、「線形合同法」や「線形フィードバックシフトレジスタ(LFSR)」、「メルセンヌツイスター」などが知られている。しかしながら、これらのものでは、一様な値を最大周期にて乱数生成が行われるような最適なパラメータを、経験的に予め探索しなくてはならないといった労力が必要となる。
【0006】
特許文献2には、乱数生成モジュールで生成された乱数列から乱数とする数列を選択する際に、素数を利用するという周期拡張方法が開示されている。しかしながら、この特許文献2に記載のものは、周期の一様性を保証するものではない。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平9-292978号公報
【文献】特開2009-3925号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明は上記の様な従来の乱数生成における問題点に鑑みてなされたもので、実質的に際限のない周期長を持った疑似乱数列を生成することが可能な疑似乱数生成装置及び疑似乱数生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明に係る擬似乱数生成装置の実施形態は、テント写像による写像演算を行うテント写像演算手段と、前記テント写像を整数演算で可能とするために、前記テント写像の最大区間を整数倍するときの素数Pを用いた式(P-1)/2が素数であるかを検出し、(P-1)/2が素数でない場合には(P-1)/2を素因数分解して素因数を求め、(P-1)/2が素数であるかまたは前記素因数が所定条件式を満たすかに基づき、当該素数Pを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段と、前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段とを具備することを特徴とする。

【図面の簡単な説明】
【0010】
図1A】本発明に係る疑似乱数生成装置の実施形態の構成を示すブロック図。
図1B】本発明に係る疑似乱数生成装置の実施形態の動作を示すフローチャート。
図2】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像のマップを示す図。
図3】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像の時系列変化を示す図。
図4】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像と位相共役の関係にあるロジスティック写像のマップを示す図。
図5】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像と位相共役の関係にあるロジスティック写像の時系列変化を示す図。
図6】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像とロジスティック写像の位相共役の関係を示すための時系列の値変動を示す図。
図7】2の乗数を、素数Pで法を採った場合の値を示す図。
図8】いくつかの素数Pを用いて式(8)によって、テント写像演算を行った場合の時系列変化を数値で示す図。
図9】本発明に係る疑似乱数生成装置のテント写像パラメータ選択手段の第1の実施形態による動作を示すフローチャート。
図10】素数Pが行方向の値を採るときの“(P-1)/2”の値、“(P-1)/2”が素数であるか否かの情報(素数である場合に「(P-1)/2が素数」欄に“○”をつけた)、“(P-1)/2”の素因数分解した結果値などを一覧としたテーブルを示す図。
図11】本発明に係る疑似乱数生成装置の乱数抽出方法の一例によって実現される2系列のテント写像演算値と乱数ビットの値を列方向に時系列で示す図。
図12】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例である第2の乱数生成方法の処理を示すフローチャート。
図13図12の方法における前段のテント写像演算のテント写像マップを示す図。
図14】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例として、乱数生成手のため、テント写像演算の結果と素数Pの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とするときの数値例を示す図。
図15】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例である第3の乱数生成方法の処理によるPとして7を採用した場合の計算の流れを示す図。
図16】本発明に係る疑似乱数生成装置の乱数抽出方法の実施形態の一例である第3の乱数生成方法の処理によるPとして43を採用した場合の計算の流れを示す図。
図17】本発明に係る疑似乱数生成装置の実施形態が採用する「あり得ない短い周期を除外する判定」を含めたP選択処理の実施形態のフローチャート。
図18】合同算術による余りの掛算の性質を示す図。
【発明を実施するための形態】
【0011】
本実施形態では、テント写像にて生成される乱数系列で1度出現した値は2度と出現さないことを実現する。これにより、その1周期内で保証する乱数列を生成可能にし、際限なく周期の延長を可能とする。
【0012】
テント写像は、ロジスティック写像と位相共役の関係にあり、テント写像はロジスティック写像の位相に相当するものである。位相が元に戻る写像の回数に着目すると、テント写像を整数演算で可能とするために最大区間[0,1]をP倍する値Pが上記「位相が元に戻る写像の回数」に相当し、フェルマーの小定理から写像の周期長を知ることができる。
【0013】
このため、最大周期についてはこの値Pに素数(1またはそれ自身の数以外では割り切れなく余りが出る自然数)を用いることで実現を図る。つまり、上記値Pとして素数を採用する。そして、最大周期と一様性の保証についてフェルマーの小定理または本実施形態において後に示す式を用いて判定を行い、選定した素数を利用してテント写像による写像を、1周期分行い乱数を取得する。
【0014】
テント写像の反復が1周期分を周回したら、次の素数候補を用意し最大周期と一様性の保証ができるか再び判定し、素数を選定してゆく手法を採用する(後に示すパラメータ遷移制御手段40)。素数にて実現できるテント写像を最大周期の1周期分行い、次に異なる素数を選定してテント写像の写像を1周期ずつ繰り返していくことで、実質的に際限なく周期を拡張できる系を生成して一様性を保証する乱数列を取得可能にする。
【0015】
テント写像を用いるメリットとしては、従来の疑似乱数生成方法と比較し、引き算とシフト演算のみのシンプルな演算で構成できる点を挙げることができる。このため、計算負荷が少なく、かつ最大周期と一様性を保証するエルゴード性のある乱数列を際限なく長い周期で取得できる。
【0016】
また、本実施形態では、傾き2のテント写像の反復毎の数値をそのまま使用すると乱数性能が悪いため、数値Xiから乱数列を抽出する方法についても言及する。
【0017】
<実施形態1> テント写像の最大区間[0,1]をP倍する値Pとして素数を採用
以下添付図面を参照して、本発明に係る疑似乱数性装置の実施形態を説明する。本実施形態では、テント写像を用いた乱数生成を行う場合においてテント写像を整数演算で可能とするために最大区間[0,1]をP倍する値Pとして素数を用いるによって生成される乱数値の周期長を一様にし、且つ十分に周期の長いものが得られるようにする。
【0018】
本発明に係る擬似乱数生成装置の実施形態は、図1Aに示すように、テント写像演算手段10と、テント写像パラメータ選択手段20と、乱数生成手段30とを備えている。テント写像演算手段10は、テント写像による写像演算を行うものである。テント写像パラメータ選択手段20は、上記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Pとして、素数で且つ(P-1)/2に基づき最大周期長の条件を満足するPを選択して前記テント写像演算手段10へ与えるものである。乱数生成手段30は、上記テント写像演算手段10による演算結果に基づき所定長の数列を生成するものである。
【0019】
本実施形態では、パラメータ遷移制御手段40を備える。パラメータ遷移制御手段40は、上記テント写像演算手段10がテント写像の1周期分演算を行う毎に、その通知を受けて、上記テント写像パラメータ選択手段20から新たなPを与えるように制御する。疑似乱数の生成が、テント写像の1周期分演算以内に終了する構成の疑似乱数生成装置においては、このパラメータ遷移制御手段40は不要とすることができる。
【0020】
(写像)
○テント写像について
テント写像は以下の式(1)で定義される。
【数1】
【0021】
テント写像のマップを図2に示し、式(1)のiを横軸にとり、縦軸をXiとした時系列を図3に示す。
【0022】
特開2016-039418号公報においては、テント写像型のA/D変換回路を用いて、“Xi<0.5”のとき、ビット0を取得し、“0.5≦Xi”のとき、ビット1を取得し連続して4ビット得る場合、初期値X0について区間[0,1]を均等に16分割した各区間から選択すると16通りのビット列が得られることが示されている。このため、テント写像ではあらゆるパターンを潜在的に生成できることから、初期値X0の採り方により乱数検定に合格できるビット列を生成すれば、高い乱数性能を持つ乱数生成器として利用できることが判る。
【0023】
また、テント写像の初期値X0の設定次第で、あらゆるバイナリ値を採ることができるため、周期的な振る舞いをする系列も考えられる限り与えることができる。このため、テント写像の初期値X0により周期長を予め知ることができれば、その周期長分のテント写像を行って乱数列として出力し、更にその後に異なる周期長を持つ周期帯の写像を行うというように、繰り返し周期の異なる写像の繰り返しを行うことで無制限に周期の異なる疑似乱数列を取得できると考えられる。つまり初期値X0で1周期分のテント写像を行い乱数列として出力し、次に初期値X0を変更して次の1周期分のテント写像を行い乱数列として出力にすることを繰り返し行うことで無制限に周期の異なる疑似乱数列を取得できると考えられる。
【0024】
このようにテント写像の初期値X0を設定することを考えると、循環する小数(有理数[分数で表される数])を設定すればよい。更に、初期値X0から予め周期長が判れば乱数の設計に有利である。ここで、テント写像はロジスティック写像と位相共役にあることが知られていることを利用できる。つまり、ロジスティック写像の位相はテント写像に該当するため、位相が元に戻る最大周期の判定を以下で説明するフェルマーの小定理を用いて導くことで、一様な乱数生成系列を得ることへ繋げる。
【0025】
○テント写像とロジスティック写像との位相共役について
ロジスティック写像は以下の式(2)で定義される。
【数2】
【0026】
ロジスティック写像のマップを図4に示し、式(2)のiを横軸とし、縦軸をXiとした時系列を図5に示す。
図5の時系列では初期値X0=0.3を設定し、式(2)の写像遷移は、
1=4x0.3(1-0.3)=0.84
である。
【0027】
結果のX1=0.84が反復入力され、
2=4x0.84(1-0.84)=0.5376
が得られる。このように、出力値が入力値として反復され縦軸Xiが開区間(0,1)において遷移されて行く。
【0028】
テント写像は式(1)で定義され、写像の反復区間は開区間(0,1)になるが、ここで円周率π(3.14159…)倍した区間(0,π)としXiをθiとした式と置き換えると次の式(3)に変形できる。
【数3】
【0029】
ここで式(3)のθを式(1)のθ1として代入し、このときロジスティック写像はX1として、次の式(4)の変数変換を行う。
【数4】
【0030】
これについてテント写像式(3)の写像を式(4)の位相として捕えることで、ロジスティック写像は常に次に式と同期する位相共役な関係にあることが判る。
【数5】
【0031】
【数6】
【0032】
図6からテント写像の系とロジスティック写像の系が同期していることが判り、位相共役の関係にあることが視覚的に読み取れる。
ロジスティック写像の式(2)の初期値X0を三角関数sin2θの場合として代入すると、
【0033】
【数7】
【0034】
図6から初期値X0の選択によりロジスティック写像式(2)を変形した式(5)の三角関数の位相“2nθ”に注目すると、初期値θにπを単純に任意の整数(ここでは素数とする)で割った値を入れた場合、短い周期でロジスティック写像の反復が遷移されることが判る。
【0035】
例えばπを11で割った値“θ=π/11(0.285599332…)”を設定したとき、式(5)よりX11まで計算すると
0=sin20(π/11)=sin2(π/11)
1=sin21(π/11)=sin2(2π/11)
2=sin22(π/11)=sin2(4π/11)
3=sin23(π/11)=sin2(8π/11)
4=sin24(π/11)=sin2(16π/11)
=sin2(π+5π/11)=(-sin(5π/11))2
=sin2(5π/11)
5=sin25(π/11)=sin2(32π/11)
=sin2(2π+10π/11)=sin2(10π/11)
=sin2(π-10π/11)=sin2(π/11)
6=sin26(π/11)=sin2(64π/11)
=sin2(4π+π+9π/11)=(-sin(9π/11))2
=sin2(9π/11)=sin2(π-9π/11)
=sin2(2π/11)
7=sin27(π/11)=sin2(128π/11)
=sin2(10π+π+7π/11)=(-sin(7π/11))2
=sin2(7π/11)=sin2(π-7π/11)
=sin2(4π/11)
8=sin28(π/11)=sin2(256π/11)
=sin2(22π+π+3π/11)=(-sin(3π/11))2
=sin2(3π/11)=sin2(π-3π/11)=sin2(8π/11)
9=sin29(π/11)=sin2(512π/11)
=sin2(46π+6π/11)=sin2(6π/11)
=sin2(π-6π/11)=sin2(5π/11)
10=sin210(π/11)=sin2(1024π/11)
=sin2(92π+π+π/11)=(-sin(π/11))2
=sin2(π/11)
11=sin211(π/11)=sin2(2048π/11)
=sin2(186π+2π/11)=sin2(2π/11)
【0036】
となり、“X0”と“X5”に着目すると位相θは“π/11”と元に戻っており、“X10”の位相θも“π/11”となっているため、ロジスティック写像の“初期値X0=sin2(π/11)”としたとき周期長5の周期を持ち写像が遷移することが読み取れる。また、テント写像の式(3)では“初期値X0=π/11”としたとき、ロジスティック写像との位相共役との関係からも周期長5で写像が半永久的に反復することが判る。
テント写像の式(1)では式(3)の最大区間は[0,π]のためπで割った“初期値X0=1/11”を設定すれば、周期長5で写像が反復することが判る。
【0037】
ここで位相“2nθ”に着目すると、初期値“θ=π/11”に対し“2n”の乗算を行った位相となり、位相は2π(360°)で元に戻るため例えば上記の“n=11”を見ると2を11乗した位相は、
11(π/11)=2048π/11=186π+2π/11=2π/11
となり、これは211=2048に対して“11”で割ると余りが2(商は186)となる。従って、位相では“2048π/11”と“2π/11”は同義となる。この余りの値に着目すると、2の11乗数に対して11で割った余りを示す合同算術の“法(modulo)”が“2π/11”の分子の値2が相当する。
【0038】
合同算術は以下の式で表される。
【数8】
【0039】
上記合同算術の式は、211=2048に対して11で割ると余りが2となることを示し、11の法(modulo)を採ると剰余は2となる意味を表している。
【0040】
フェルマーの小定理では合同算術において“p”を素数とし、“a”を“p”の倍数でない整数(“a”と“p”は互いに素[最大公約数が1]、つまり“p”が素数であればよい)とするときに以下の式(6)が成り立つことが知られている。
【数9】
【0041】
上記の例では素数“p”は11であり、“a”は2とすると式(6)の関係が成り立っている。また“a”の“p-1”乗を“p”で割った余りは1であるという以下の式(7)が成り立つこと(式(6)の両辺を“a”で割る意)も判る。
【数10】
【0042】
図7に、“p”を素数7から47まで“a=2”とした場合の式(6)の計算結果を示す。
数値の1を網掛けにして示しているが“p=11”のとき、つまり乗数が“p-1=10”のとき、法を採った値は1、“p=19”では乗数が“p-1=18”のとき、法を採った値も1となっており、式(7)が成り立っていることが確認できる。
【0043】
上記からロジスティック写像の式(5)の位相の初期値として素数“p”を分母として与えて“2p”の乗算を行ったとき、式(6)から割り切れない数は、仮分数(2pπ/p)から帯分数(186)の真分数が“2π/p”となるため、真分数の分子の2は割り算の余りとして示される。このことからフェルマーの小定理により分母“p”を素数としたときにロジスティック写像と、その位相となるテント写像が“p-1”のとき値が戻る周期を持つことが判る。
即ち、テント写像の式(1)では、“初期値X0=1/p”を与えれば、Xp-1は“1/p”と初期値X0に戻り、“p-1”の周期を持つことが予想される。
【0044】
ここで、式(1)を整数で演算が行えるように、最大区間を[0,1]からP倍に拡大したものが以下の式(8)になる。
【数11】
【0045】
上記式(8)では区間をP倍しているため、式(1)では“初期値X0=1/p”だが、式(8)では“初期値X0=1”を与えることになる。
【0046】
図8に、Pを素数7から47を用いてテント写像において“初期値X0=1”を与えて写像の反復を行ったときに得られる各Xiを示す。ここでXiの値はテント写像の式(8)から全て2倍され偶数を採るはずだが、初期値X0に奇数を採った場合に初期値X0が元に戻る値が確認できるように、式(8)が“P/2≦Xi”のときは“(P-Xi)”の値をXiとして示している。
図7の2p-1にPで法(modulo)を採った値が1となっているが、同様に図8のテント写像では“P-1”回目の写像の値は1に戻っていることが読み取れる。
【0047】
ここで、素数11の列に注目すると左側の2の乗数を採った結果は“n”が10のとき法をとった値が1となっており周期が10だが、テント写像では“n”が5のときの値も1になっており周期が5になっている。
これはロジスティック写像の式(5)の初期値X0の位相“θ=π/11を与えてトレースした例を見ると判るように、X5にてX0と同じ値になっているが三角関数のため、
5=sin25(π/11)=sin2(32π/11)
= sin2(2π+10π/11)=sin2(10π/11)
となるが、三角関数の補角公式では “sin(10π/11)
=sin(π-10π/11)”となるため、
=sin2(π-10π/11)=sin2(π/11)
が得られ、初期値X0に戻るためである。
【0048】
つまり、図7のように2の乗数に11の法を採った値は{1,2,3,4,5,6,7,8,9,10}それぞれ1回を採り、周期長10で繰り返されるが、サイン関数の位相“2nθ”にあてた場合、位相が
{6π/11,7π/11,8π/11,9π/11,10π/11}と{5π/11,4π/11,3π/11,2π/11,1π/11}のとき、サイン関数(sinθ)では同じ値をとるため、ロジスティック写像とテント写像の周期長は5となることが判り、図8のテント写像の採る値は{1,2,3,4,5}それぞれ1回になる。
【0049】
図7のフェルマーの小定理の規則では、n=5のとき25の11の法(modulo)を採った値は10になるが、n=5からn=9までの値を列記すると{10,9,7,3,6}となっており、それぞれの値を11から引いた数は{1,2,4,8,5}となることが判り、ロジスティック写像の式(5)の位相に当てはめることで、ロジスティック写像は周期長5で繰り返すことが確認される。
【0050】
上記の例では素数11を法とした場合を示したが素数を変数Pで表すとロジスティック写像とテント写像はP=11のため、“(P-1)/2=5”の周期で繰り返されることが判る。
しかしながら、図8の素数{7,17,31,41,43}に注目すると素数Pとしたときの最大周期が“(P-1)/2”を採らないことが確認できる。例えば“43”ではテント写像の式(8)の最大周期は(43-1)/2=21の周期長で1~21の数値をそれぞれ1回ずつ周期内で一様性確保のために取得したいところだが周期長が7となっており{1,2,4,8,16,11,21}で1に戻り繰り返されるため1~21の数値が全て一様に採れないことが確認できる。
【0051】
このため、最大周期長(P-1)/2で1度採った値は2度と採ることが無い一様な値が採れることを保証できるよう以下の実施形態2のようなアルゴリズムを採用する。
【0052】
<実施形態2> 最大周期にて一様性を満たす素数を選別
本実施形態においては、図1Aに示したテント写像パラメータ選択手段20は、(P-1)/2が素数であることを最大周期長の条件としてPを選択することを特徴とする。
図8では、式(8)の各素数Pを当て、初期値X0=1から始めたテント写像の反復毎の“Xi”or“P-Xi”を示している。上記で説明した通り、ロジスティック写像とテント写像が位相共役の関係にあることから、周期長は“(P-1)/2”で“Xi=1”に戻ることが全ての素数において生じていると確認できる。
【0053】
しかしながら、一様な乱数列を取得したいという要望から、“(P-1)/2”を最大周期とした場合に、1度採った値は2度と採ることが無いような数列を得たいものである。例えば、P=43の数列は(43-1)/2=21の周期内で数列が{1,2,4,8,16,11,21}となる周期長7の周期となり、周期長21で一様な数列となっていない。
【0054】
ここで、試しにその数列で採ることが無かった初期値X0=3を設定した場合、{3,6,12,19,5,10,20}という周期7の数列となる。1つ目と2つ目の数列で採っていない値を調べると、“初期値X0=5”が当て嵌まることが判り、この数列は{5,10,20,3,6,12,19}という周期長7の数列であり、この3つを合わせれば1~21の数値を1つずつ採ることができる。
【0055】
また、P=43のとき、の“(P-1)/2”は21となるが、21を素因数分解すると、“3×7”に分解され、初期値X0=1の場合、周期長3で“X3=1”に戻るかあるいは周期長7で“X7=1”に戻るケースが考えられる。
ここに、テント写像の式(8)から“初期値X0=1”の次は必ず“X1=2”となるため、“(P-1)/2>3”であれば周期長1は有り得ない。また、上記で説明したようにフェルマーの小定理の式(7)により、周期長“P-1”にてPで法(modulo)を採った値は必ず“1”をとる。
【0056】
このため、“(P-1)/2”が素数ではなく合成数のとき、素因数分解を行いその素因数で“(P-1)/2”を割ってみることで、割った周期長の短い周期が存在する可能性が推測される。しかし、“(P-1)/2”が素数であれば周期は最大“(P-1)/2”を採り一様な数列を得ることが保証できる。なぜなら、“(P-1)/2”が何れかの素因数で割り切れるならば割った周期長で何回か周回して“1”に戻っている可能性はあるが、割り切れない数値(2以上の素数)であれば、“(P-1)/2”より小さい周期に分解できない構造となり、“(P-1)/2”で“1”に戻ることが推測される。上記で位相共役の関係を示したが、フェルマーの小定理から周期は“P-1”にてPで法(modulo)を採った値は必ず“1”に戻るからである。
【0057】
つまり、“(P-1)/2”が素数ならば初期値X0=1から始めて、この周期内でXi=1を採ることは無く、Xp-1で周回して元の値Xp-1=1に戻る。ここで素因数として、P=37を例にとると“(P-1)/2=18”であり、18を素因数分解すると“2×3×3”となる。従って、素因数として2,3が挙げられ、周期を調べるときは“(P-1)/2=18”を素因数2で割ると9となり周期長9を持つ可能性があり、他の素因数3では“(P-1)/2=18”を割ると6となるため周期長6を持つ可能性があると推量できる。
【0058】
以上から、“(P-1)/2”が素数であれば周期内で1度出力された数は2度と出力されない一様な数列を得ることができる。図1Aに示すテント写像パラメータ選択手段20の第1の実施形態が行う処理に相当する図9のフローチャートに示すように、“(P-1)/2”が素数であるかを判定して素数であればその値を採用し、式(8)に適用する。式(8)を実行して周期長“(P-1)/2”の数列を出力した後に、“P”かつ“(P-1)/2”が素数となる別の素数Pを選定して式(8)により周期長“(P-1)/2”で数列を出力することを繰り返し行っていくことで最大周期長が保証され、かつ一様な値を連続して出力可能となることが了解される。
【0059】
図10に、素数Pが行方向の値を採るときの“(P-1)/2”の値、“(P-1)/2”が素数であるか否かの情報(素数である場合に「(P-1)/2が素数」欄に“○”をつけた)、“(P-1)/2”の素因数分解した結果値などを一覧としたテーブルを示す。この図10に示されている素数は、「エラストテネスのふるい」というアルゴリズムを利用して素数判定して得たものである。本実施形態は、“(P-1)/2”が素数であるか否かを判定し、素数である場合に写像演算を行って乱数列出力するアルゴリズムを採用する。1つの素数を用いた写像演算では“(P-1)/2”回のテント写像演算が行われ、この写像演算が終了となると、図10の「(P-1)/2が素数P」欄において次に“○”が付されている素数候補を採用し、また“(P-1)/2”回の写像を行い乱数出力する構成とすることができる。以上のように、“(P-1)/2が素数”という判定基準は、素数Pがテント写像の最大区間[0,1]をP倍する値Pとして採用できるか否かの判定基準であるということができ、「テント写像の最大区間の倍化値として採用の判定基準」と言うことにする。
【0060】
○乱数生成方法
ここで、乱数生成方法について触れる。即ち、図1Aにおける乱数生成手段30の具体的動作例を示す。
式(8)のテント写像Xiの値そのものを乱数として用いることを考える。この場合には、演算を初期値X0=1から始めて“X1=2,X2=4,・・・”という数列が得られる。即ち、2を掛け算した結果に限られるため、乱数として利用するには数列のパターンが周期毎に限られてしまい乱数性能が悪い。このため、本実施系形態に係る図1Aにおける乱数生成手段30は、以下のようにテント写像のXiから乱数を取得する方法を採用する。
【0061】
特開2016-039418号公報には、テント写像によるA/D変換回路が紹介されている。この公報に記載の手法は、初期値X0の区間[0,1]を均等に分けた写像の反復毎に“Xi”が0.5未満のときビット“0”を取得し、“Xi”が0.5以上のときにビット“1”を取得し、連続して得られた初期値X0に相当するビット列を得るというものである。このため、出力された数列をそのまま乱数として利用するのではなく、“Xi<0.5”のときはビット“0”を抽出し、“0.5≦Xi”のときにはビット“1”を抽出する規則にて1ビットずつを連続してビット列を得て乱数列とする手法が考えられる。つまり、第1の乱数生成法は、テント写像による写像結果を順次並べて、乱数とするものである。この手法によれば、初期値X0の採り方次第で乱数検定に合格するであろうと推測できるため、予め乱数検定に合格する初期値X0を設定すれば良いことになる。しかしながら、写像の度に1ビットずつのみの乱数抽出を行う手法では、乱数生成速度が遅くなる。そこで、乱数列として使える値を出力させるために図11に示すような乱数抽出方法が考えられる。
【0062】
図11は、テント写像式(8)にP=83を与えるものとすると、“(P-1)/2=41”となって、「テント写像の最大区間の倍化値として採用の判定基準」を満たす素数である。このため周期長が41に確定される系列となるように、図12に示すフローチャートに示す処理を行う構成を採用することができる。即ち、ステップS21に示すように、テント写像の初期値AX0と初期値BX0とを用意する。また、テント写像としては、ステップS23に示す異なる2つのテント写像Aとテント写像Bを用意する。このように異なる初期値X0を二つ用意したテント写像Aとする“初期値AX0=1”を与え、もう一方のテント写像Bに“初期値BX0=23”を与えて同時に2つ実行する(S21~S23)。乱数抽出はステップS22に示す基準で行う。ここでは、図13のテント写像マップに示すように、式(8)のPが、“Xi<P/4(=20.75)”のときビット“0”を出力し、“P/4(=20.75)≦Xi<P/2(=41.5)”のときビット“1”を出力し、“P/2(=41.5)≦Xi<3P/4(=62.25)”のときビット“0”を出力し、“3P/4(=62.25)≦Xi”のときビット“1”を出力する(S22)。図12の例は、2つの異なる初期値X0=1とX0=23を与えた2つの式を同時に実行して2ビット分の出力が乱数ビット列として得られた例である。つまり、この第2の乱数生成法は、2系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、各テント写像毎に1系列から1ビットずつ、合計2ビットを得る処理を繰り返し、並べて所定長の乱数列とするというものである。
【0063】
なお、図11では“2(P-AXi)”と“2(P-BXi)”の結果は数列が1~41を各一回採っていることが判るように、“(P-AXi)”もしくは“(P-BXi)”の値をAXiもしくはBXiの列として表示している。
このようにXiをそのまま乱数として利用するのではなく、Xiからビット抽出を行い、初期値X0が異なる系列を並列(同時)に計算を実行することで、素数Pに応じる周期長が確定し、一様な値を保証できる乱数パターンがよりバリエーション多く生成可能となる。
【0064】
他の実施形態を説明する。異なる初期値X0を3つ与え、式(8)を並列に3つ実行するものである。1つ目の初期値X0では下位ビット桁2番目と6番目から2ビット抽出、2つ目の初期値X0では下位ビット桁4番目と7番目から2ビット抽出、3つ目の初期値X0では下位ビット桁1番目と3番目と5番目と8番目から4ビット抽出する。これら3つの出力を、図1の乱数抽出部で合わせて8ビット分を出力することで、より分散された乱数を得ることが期待できる。なお、桁数は式(8)より写像は閉区間[1,P-1]の最大値Pの桁で包含できることが前提である。このため、初期設定値として並列(同時)に式(8)を演算する数とそれぞれの初期値X0、乱数を抽出するビット桁が設定値として挙げられる。つまり、第3の乱数生成法は、3系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、各テント写像毎に第1の系列から所定ビット、第2の系列から所定ビット、第3の系列から所定ビットを得て、並べて所定長の乱数列とするというものである。即ち、1回の写像により所定長の乱数列を得るものである。なお、系列は3以上であっても良いことは勿論である。
【0065】
更に、素数Pの切り替わりで、これらの初期設定を変更することで乱数のバリエーションを加えられるようにしても良い。図14に示すように例えば素数P=83を2進数展開すると“(1010011)2”となるが、このビット情報から下位4ビット分“(0011)2”を抽出し、式(8)においてP=83とし、更に初期値X0=1を設定して式(8)の反復演算を行う。各“Xi”から図14の“Xi”の下位4ビット”の列のように4ビットを取り出し、素数83から取った下位4ビット分“(0011)2”と排他的論理和を行い図14の一番右の列のように乱数として取り出す。このように素数が変更される度に、変更された素数からビット桁を抽出することで、乱数値としてバリエーションを増やしていくことが考えられる。この第4の例は、4ビットであるから、2回の写像により所定長ビットを得るようにすることができる。また、第1~第3の乱数生成法において、素数Pから所定ビットを取り出し、各系列の写像値との排他的論理和を得て、これを第1~第3の乱数生成法によって並べるようにしても良い。また、上記Pの値の一部に限らず、上記Pの値の全部と各系列の写像値との演算(排他的論理和に限定されない)を行っても良い。
【0066】
また、上記の実施形態では、乱数生成において周期長“(P-1)/2”を保証する数列を採るために、P/2≦Xiの場合(P-Xi)の値から乱数を取得するが、人為的に周期長を2倍した“Xi”を採ることも可能である。例えば、図8の素数11を例にとると、数列は{1,2,4,3,5}の周期長となっているが、P/2≦Xiの場合に(P-Xi)を採るのではなく第一順目はXiをとると、数列は{1,2,4,8,6}となる。そして、テント写像において周期が一順した後に、Pから第一順目の数列全ての引き算を行って数列{P-1,P-2,P-4,P-8,P-6}を得る。ここで、P=11を当て嵌めると{10,9,7,3,5}となり、上記第一順目の結果と合わせて{1,2,4,8,6,10,9,7,3,5}と言う周期長10を採ることができる。他のP値にも適応すれば周期長“P-1”を採れることが考えられ、周期長を2倍にした数列を取得しそれらから乱数列を取得できる。この第5の乱数生成法は、第一周期分の写像値の数列を得た後に、1周期分の写像値の数列を「テント写像の最大区間の倍化値として採用の判定基準を満たす素数P」から引いて第2の数列を求め、第一周期分の写像値の数列に上記第2の数列をつなげて並べ、この並べたものから所定長分を取り出すものである。取り出し方は、予め用意した位置(数列の位置)から所定長を取り出す(末尾の数を取り出しても所定長とならぬ場合には数列の先頭へ戻って取り出しを行う)。この処理を1周期毎に素数Pを変えて行う。
【0067】
なお、各実施形態において、素数Pの選択切り替えは昇順に選択していく方法が考えられる。例えば、乱数のバリエーションを増やすために昇順をいくつかを飛ばして選択する、飛ばす個数をそれまで出力した乱数を用いて毎回変動する方法などが乱数性向上させる手法として考えられる。また、擬似乱数生成装置としては、上記各乱数生成手法をすべて備え、オペレータやユーザが1つの手法を選択するようにしても良い。
【0068】
<実施形態3> 最大周期にて一様性を満たす素数を数式により選別
実施形態2では“(P-1)/2”が素数でない場合はスキップし、“(P-1)/2”が素数であるか探索し、1周期内で1度出力された数は2度と出力されない数列をテント写像の反復から得るアルゴリズムであった。ところが、図8のテント写像の列では“(P-1)/2”が素数とならない数値13、数値19、数値29、数値37において、周期長が“(P-1)/2”となっていることが確認できる。このように、“(P-1)/2”が素数でなくとも、1周期内で1度出力された数は2度と出力されない数列を得ることができる数値が存在することが判る。そこで以下に、これらを乱数生成に利用できるようにアルゴリズムを採用する。
【0069】
本実施形態に係るテント写像パラメータ選択手段20は、(P-1)/2を素因数分解して求めた素因数Cmにより算出された周期長候補Kmが、Km≦(log2P-1)が成り立つことを最大周期長の条件としてPを選択することを特徴とする。更に、本実施形態に係るテント写像パラメータ選択手段20は、2Km±1≡0(mod P)の成立を判定し、成立する場合には当該Pを用いないこと構成とすることができる。
【0070】
テント写像式(8)の振る舞いに着目し、テント写像の初期値X0=1から始めて“P-Xi=1”に戻るときの周期の長さを、図8の“素数P=7”の例にトレースして見積る数式を考える。最初に、式(8)において、素数P=7、初期値X0=1を設定して開始する。
【0071】
図15に計算の流れを示す。式(8)に着目するとP/2=3.5以上のとき、“7-Xi”を実行するため3.5以上になるまで2のべき乗を実行する。X0=1のためX1=2(=2X0),X2=4(=2X1)にて“7-X2”が実行される。
【0072】
図15では“X2=7-22”で示され、ここでの2の指数を“z1=2”と示す。X2=3となり再び“7-Xi”を実行するため3.5以上になるまで2のべき乗が実行されるため、X3=21×3=6(=2X2)にて“7-X2”が実行され“7-6=1”になり初期値X0=1に戻るため、周期長3で式(8)が繰り返されることが判る。ここで、2の指数z2=1となる。
【0073】
以上の流れを代数式に当て嵌めると、
7-21(7-22)=1
が成り立つことがわかる。ここで素数7を変数P、指数を図15に示すようにz1(=2),z2(=1)を使用すると、
【数12】
【0074】
となり展開すると、
【数13】
【0075】
が得られ、Pでくくり変形すると以下の式(9)を最終的に得る。
【数14】
【0076】
また、もう一例として素数P=43、初期値X0=1を設定して同じくXi=1に戻るまでをトレースする。図16に計算の流れを示す。式(8)に着目すると、P/2=21.5以上のとき、“43-Xi”を実行するため21.5以上になるまで2のべき乗を実行する。
【0077】
0=1のため、“X1=2(=2X0),X2=4(=2X1),X3=8(=2X2),X4=16(=2X3),X5=32(=2X4)”にて“43-X5”が実行される。図16では、“X5=43-25”で示され、ここでの2の指数を“z1=5”と示す。X5=11となり、再び“43-Xi”を実行するため、21.5(43/2)以上になるまで2のべき乗が実行される。このため、X6=21×11=22(=2X5)にて“43-X6”が実行され、“43-21×11=21”になり、ここでの2の指数を“z2=1”と示す。
【0078】
次の“43-Xi”の実行は、X7=21×21=42(=2X6)となり、“43-X7”が実行されて“43-42=1”になり、ここでの2の指数を“z3=1”とする。初期値X0=1に戻るため周期長7で式(8)が繰り返されることが判り、周期長7=z1+z2+z3(=5+1+1)として表せられる。
【0079】
以上の流れを代数式に当て嵌めると、
43-21(43-21(43-25))=1
が成り立つ。同様に素数43を変数P、指数を図16に示すようにz1,z2,z3を使用すると、
【数15】
【0080】
となり展開すると
【数16】
【0081】
が得られ、Pでくくり変形すると以下の式(10)を最終的に得る。
【数17】
【0082】
以上テント写像式(8)にて初期値X0=1を当て嵌め、Xi=1に戻るまでをトレースした。
次に“z1,z2,z3,…,zr-1,zr”である数列を仮定して式(9)と式(10)より、この後に示す式(11)にできることが予測できる。ここで、
【数18】
【0083】
として式を展開したものが、
【数19】
【0084】
になり、最後の項“(-1)r”についてはzrの添え字“r”が奇数のとき、“-2Zm”であり、偶数のとき“+2Zm”になることが式(9)と式(10)からも読み取れる。最終的には以下の式(11)が得られる。
【数20】
【0085】
“Zm”は上記で示したようにPを素数として、“(P-1)/2”を素因数分解したときに得られる素因数で“(P-1)/2”を割ったときの値がテント写像式(8)の周期長“Zm”となっている可能性がある。例えば、P=43の場合に(P-1)/2=21となり、これを素因数分解すると素因数は“3”,“7”の2つが得られる。得られた素因数“3”,“7”で“(43-1)/2”を割る。
【0086】
すると、(43-1)/2/3=7と(43-1)/2/7=3になるため、“Zm”として数値7,数値3が当て嵌められ、P=43を式(8)に代入して写像を反復すると周期長が7か3になる可能性があることが判る。実際は図8のP=43を見ると周期長7で写像が反復していることが判る。ここでZmは、を式(8)による演算を行うときに生じる2の冪乗の指数の和であり、式(10A)により表わされる。従って、Zmの添字mに数値を入れた表現で“(P-1)/2”の素因数を表現すると、式(10A)の2の冪乗の指数と混同を生じるので、以下“(P-1)/2”の素因数或いは周期長を表現するときには“Km(m=1,2,3、・・・)”と表現する。
【0087】
ここで、周期長についてX0=1から始めた場合を考えると、式(8)から2s+1(“s+1”とプラス1であるのは、“P-Xi=1”のときXi=2から始まるため1追加しておく)がPまで最低限確保される周期長は、“s”以上のときになることが保証される。なぜなら“P-Xi”の演算を行うまでXiがP未満のときになるため、それまで“2s+1”の演算を行えるからである。このため最低限の周期長は“2s+1<P”まで採れることになり、2を底とする対数を採ることで、次の式(12)が得られる。
【数21】
【0088】
P=43の場合、log2P=5.426265であるため、“s=4”(24+1<43)となるため、周期長は最低4以上となる。従って、周期長Kmの候補はK1=7,K2=3であるが、K2=3は(周期長3はあり得ないことがわかり)除外対象となる。このように“(P-1)/2”をそれぞれの素因数で割るときは、小さい素因数から割って求めた周期長候補のKmを(大きい順番に)算出し、式(12)より“Km≦s”になる場合は除外しても良いことが判る。
【0089】
式(11)から左の式の計算結果は必ず整数を採るため、右の計算では素数Pで割った値は余りの生じない割り切れる数になることが判る。このためテント写像式(8)より“(P-1)/2”を素因数分解して得られた素因数で割った周期長の候補をKmとするとき、式(9)と式(10)の形態から以下の式(13)が与えられる。
【数22】
【0090】
式(13)が成り立たつとき、式(8)の周期長は“(P-1)/2”より小さいものが存在するといった定理が導かれる。
テント写像の式(8)では、“Km=(P-1)/2”のときは写像の値Xiは元に戻るため“2Km+1”あるいは“2Km-1”のどちらかが必ず素数Pで割り切れる。因みに、このときは下記のオイラーの基準と同等であることが判る。
【0091】
<オイラーの基準>
“P”を素数とし,“a”と“P”が互いに素な整数とするとき,以下が成り立つ。
【数23】
【0092】
ルジャンドル記号と言われ、初等整数論の基本定理として取り上げられておりここでは詳細な説明は割愛するが、“a”が“mod P"で平方剰余のとき“+1”、“a”が“mod P"で平方非剰余のとき“-1”を採ることが知られており、次の式が成り立つ。
【数24】
【0093】
式(13)で“Km=(P-1)/2”、“a=2”としたものと同じとなることが判り、整数演算化したテント写像式(8)の周期においてオイラーの基準が当て嵌まることが判る。
【0094】
テント写像式(8)による乱数生成では、周期長“(P-1)/2”となる素数Pを選択して一様な“Xi”を取得したいため、式(13)が成り立つかを確認して、余り(modulo)が“0”になる場合は“(P-1)/2”より短い周期長が存在することが判ることから、その素数Pを除外することができる。次の素数候補を取得して再び短周期があるかをチェックすることで周期長が“(P-1)/2”となるかを調べて、周期が“(P-1)/2”であることを保証できればその素数Pを採用し乱数を生成して行けば良い。
【0095】
図17に、式(12)によるあり得ない短い周期を除外する判定を含めたP選択処理の実施形態のフローチャートを示す。このP選択処理は、第2の実施形態である“(P-1)/2が素数”という条件が満たされている場合には、このPを選択するようにしている。即ち、図9に示したフローチャートの処理を含むものである。
【0096】
以下、図17のフローチャートを参照してPを選択する処理を説明する。まず、任意の素数をPとして取り込む(S31)。次に、“(P-1)/2” が素数であるかを検出する(S32)。ここでYesとなると、この値のPを採用する。ステップS32においてNoとなると、“(P-1)/2”を素因数分解し、素因数Cmを算出する(S33)。
【0097】
次に、求めた各々の素因数Cmで“(P-1)/2”を割算し、周期長候補Kmを求める(S34)。ここに、周期長Kmは、
1=(P-1)/2/C1
2=(P-1)/2/C2
3=(P-1)/2/C3
・・・・・・・・・・・・・
m=(P-1)/2/Cm
【0098】
次に、Km≦log2P-1が成り立つかを調べる(S35)。Noとなると、
Km±1≡0(mod P)の成立を判定する(S36)。ここで、Noとなると、Kmのmを1インクリメントし(S37)、ステップS35へ戻って処理を続ける。
【0099】
また、ステップS36においてYesとなると、ステップS31へ戻って次の素数を“P”として、選択して処理を続ける。また、ステップS35においてYesとなると、この値のPを採用する。
【0100】
上記ステップS32においてYesとなった場合のPと、上記ステップS35においてYesとなった場合のPが、乱数生成に必要な数だけ収集されると、この図17の処理は停止され。ここで選択されたPを用いた乱数生成へと処理が進められる。
【0101】
図17の判定フローチャートによる処理プログラムを実装し、“(P-1)/2”が素数とならない場合、“(P-1)/2”を素因数分解してKmを求め、式(13)により短周期が存在するかを調べることができる。ここで、“(P-1)/2”より短い周期があると判定された素数Pの結果が、図10において“×”によって示されている。図10における2Km±1の欄は式(13)により素数Pで法(modulo)を取った結果、余りが“0”となったときの数値Kmを示している。
【0102】
判定の結果、図10における上記欄に示されるマークが“○”となった素数P使って、式(8)のテント写像による反復演算を行い周期長“(P-1)/2”が保証された“Xi”を出力して乱数生成を行うことができる。実施形態2と比較して、Kmの算出と式(13)による周期長と一様性が保証できる素数Pであるか確認する計算を要する。しかしながら、利用できる素数を増すことができるため、素数の選択の範囲を広げて多くの素数が使えるといったメリットが得られる。
【0103】
式(13)では、2のべき乗になるため指数が大きくなるほど桁数は莫大になるが2進数では指数分を左シフトで行えば良く、素数Pを2進数展開してビット値同士の割り算を行い割り切れるか否か(余りが出ないか)を確認すれば良い。従って、コンピュータ実装での計算を考えるならば、割り算は引き算の演算を実装すれば良いため計算量はそれほど問題とならないと推測される。
【0104】
また、指数が大きいほど桁が莫大になるが、合同算術では法(modulo)を採ることにより、或る値Q同士を掛け算した結果の余りにもう一度或る値Qを掛け算して余りを出すと、元の掛け算(Q3)の余りに等しくなるといった性質があり、桁を抑えて演算できる。この手法を図18に示す。
【0105】
例として図10の“素数P=41”の行の2Km±1の欄から27+1の結果は、素数P=43で割り切れることを示している。
つまり、27+1≡0(mod43)であるため、正直に指数をかけた場合は、129≡0(mod43)と129を43で割った余りを出すことになる。ここで、上式において“+1"を右辺に移項すると27≡-1(mod43)となる。この式で“-1"は“43-1"を意味するため27≡42(mod43)であるかを確認するために、図18に示すように1を余りに対し2を掛け算して、法(modulo)を採り、一つ一つ計算してゆくことで桁数を増やさずに演算できるのである。
【0106】
但し、大きな桁の素数同士の掛け算による合成数は、桁が大きいほど素因数分解の計算に莫大な時間がかかるとされている。従って、現実的には、現在のコンピュータでそれほど計算時間がかからない程度の桁数の素数を選択することが推奨される。
【0107】
従来のカオスを利用した疑似乱数系列は、一様性の面では理論的な構築がなされておらず、数値に偏りが起こる懸念があった。これに対し上記に示した実施形態は、周期が見積ることができるようになったことで、一様性が保証でき良質な疑似乱数列を生成できる効果を奏する。
【0108】
更に、上記実施形態では、一周期内で一様性を保証できる素数か確認し、その素数を用いて乱数列を出力し、周回したら一様性を保証する別の素数を採用して乱数列を生成して行くものである。このため、素数は無限に存在することが知られており、実質的に際限のない周期長を持った疑似乱数列を生成することが可能となるという効果を奏することが期待できる。
【0109】
以上の実施形態の疑似乱数生成装置は、全て図1Bに示すフローチャートに対応するプログラムによりコンピュータが処理を行うものとして実現できる。以下、この図1Bを用いて動作説明を行う。まず、取得する(生成する)乱数の容量(乱数列長)“M”を設定する(S11)。
【0110】
次に、“P”として素数を取得し、この“P”が、テント写像を行ったときに最大周期“(P-1)/2”を実現する数値であるものを設定する(S12)。次に、テント写像に最大演算精度Pと初期値X0を設定し、レジスタiを0に設定する(S13)。次に、テント写像演算の結果が出ていなければステップS14をスキップして、ステップS15のテント写像演算を実行する(S15)。このステップS15においては、レジスタiの値を1インクリメントし、レジスタjの値をLインクリメントしておく。ここに、Lは1回の乱数演算結果を用いて作成される乱数の長さを示す。
【0111】
次に、レジスタiの値が“(P-1)/2”となったかを検出し(S16)、Noとなると既に説明した乱数生成手段30による乱数生成処理が行われる(S14)。ステップS14からステップS6までの処理の繰り返しによって1周期分のテント写像が終了すると、ステップS16においてYesへ分岐し、レジスタjの値が乱数の容量(乱数列長)“M”を超えたかを検出し(S17)、NoとなるとステップS12へ戻って処理が続けられ、ステップS17にてYesとなると処理を終了する。
【符号の説明】
【0112】
10 テント写像演算手段
20 テント写像パラメータ選択手段
30 乱数生成手段
40 パラメータ遷移制御手段
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18