プログラムで愉しむ数理パズル 未解决の难问や础滨の课题に挑戦
本书は、プログラミングを通して数理パズルを楽しみ、その背后にある考えや応用につながるアイディアを理解し、シミュレーション実験と思考実験の习熟を目指しています。
学生時代にはプログラミングが好きでも得意でもなかった筆者は、自分のためにプログラムを書き始めて、その面白さに魅入られました。博士課程で人工知能の一分野 (「幾何定理の自動証明」) を研究テーマとしてコンピュータを利用するうちに、コンピュータは道具でありながら、かつ創造的な手段であることに気が付いたのです。実験したり計算したりすることは、偉大な数学者においても重要な研究のよすがであったようです。ガウスやオイラーが現代に蘇ったとすれば、きっと彼らもコンピュータを駆使していたと思います。
そのため本书では、さまざまな数理的なトピックをプログラミングの実行を通して理解するように解説しています。その内容は、数学の未解决问题、确率パズル、数理パラドクス、中立进化のメカニズム、数理最适化など多岐にわたります。人工知能や人工生命の最新のトピックへの関连も绍介しています。これらの话题はそれぞれ独立なので、読者は兴味を持った问题から読み进めていくことをおすすめします。
特に後半では、人が解くには難しいため、プログラムの力を借りてステップ?バイ?ステップで解 (最適解や近似解) に近づけていく方法をとります。それによって問題の背後にある数学的意味をより容易に読み解けるようになります。例えば確率の部分では、実際にコンピュータで実験を繰り返して状況を再現することで、(理解することがやや難しい) ベイズ的な考え方をわかりやすく説明をします。組み合わせや最適化では、人が考える手法や既存の方法の長所?短所を順序立てて説明し、どのように効率が違うのかをシミュレーションで検証したのち、よりAI的な手法での解法を解説します。
本書のもとになったのは、筆者の大学でのプログラミングや人工知能などの講義ノートです。これらの講義では、毎回優れたプログラムや感心させられるレポートを目にすることが少なくありません。また、まったく講義と関係ない一般の方々 (社会人や他大学の学生など) から解答を送られてくることもありました。ホームページをみて課題内容に興味を持たれたそうです。
本書で説明するデモやプログラムは筆者の研究室のホームページからダウンロード可能になっています。読者は是非自ら実験して、プログラミングで愉しみながら学んでください。ただしこれらのプログラムは解答の一例かもしれません。そのためダウンロードして実行するだけではなく、自分でプログラムを修正 (できれば作成) することを推奨します。それによりプログラムを通して考えること、さらには人工知能や人工生命につながるようなプログラムを実現することの楽しさや奥深さを実感できると期待しています。
(紹介文執筆者: 情报理工学系研究科 教授 伊庭 斉志 / 2020)
本の目次
1.1 素数を生成する式
1.2 素数を判定するアルゴリズム
1.3 素数の不思议
1.4 繰返しを极めよう
1.5 未解决问题の予想に挑戦しよう
1.6 整数になる不思议
1.7 叁角形を考える
2. 确率の不思议を见てみよう
2.1 パスカルの问题:确率论の诞生
2.2 ランダムな3点が鋭角叁角形になる确率は?:答えが一つとは限らない
2.3 入れ替わっても元の位置にない确率は?
2.4 コペルニクスの原理と未来の予测
3. 确率の难问に挑もう
3.1 ベイジアンになろう
3.2 3囚人の问题:私は幸せになったのか?
3.3 モンティ?ホール问题:一攫千金を狙え
3.4 碍谤耻蝉办补濒カウント:マジックは好きですか?
4. 论理パズルを読み解く
4.1 100囚人の问题:プログラミングに群论を
4.2 迟谤耻别濒:3人で决闘をしてみたら&丑别濒濒颈辫;
4.3 13日の金曜日は本当に多いのか?
4.4 叁段论法推论:ソクラテスは死ぬか?
5. 进化の不思议を见てみよう
5.1 モラン过程
5.2 遗伝子の固定确率
5.3 进化速度
5.4 中立仮説
5.5 中立进化を実験してみよう
5.6 中立仮説と进化速度
5.7 系统树の作成
5.8 最尤法による推定方法
6. 最适化の难问に挑戦しよう
6.1 秘书问题:一番よい秘书さんを选ぶには?
6.2 分割问题:公平に分割するのは难しい
6.3 荷物をどう詰めるか?
付録:プログラム
引用?参考文献
练习问题のヒントと解答例