体験しながら学ぶ ネットワーク技術入門を読み始めた

1章の検証環境を構築しようでつまずいた。(Windows11環境)
もとからwslはinstallしてあったのでUbuntu22.04が入っていた。そのまま構築手順を進めていったが構築テストでエラーが出てくる。Ubuntuを20.04にinstallし直してみたが関係なかった。
ネットで情報を探していたら著者からのコメントがあった。どうもすでにinstallしていたDisktopDockerが良くないのでは考えコントロールパネルからDockerをuninstallして順に本のとうりに進めたらOKとなった。

www.sbcr.jp

株価データベースを「Docker」で作ってみる

江端智一さんが公開されている、「お金に愛されないエンジニア」のための新行動論(4)でDockerで株価データのデータベースを作って、Golangのシミュレーションプログラムを実行しpythonでグラフを描いてみるまでを真似してみた。

eetimes.itmedia.co.jp

江端さんのGitHubをcloneするとDドライブ直下にmoneyフォルダができる。

money1フォルダまでおりて(docker-compose.ymlファイルがあるフォルダ)

> docker-compose up -d 

とするとバックグラウンドでDockerが起動している(doker-compose startは不要)

>docker-compose ps  

>docker exec -it postgres bash 

ここからWindows10環境からDocker上のlinux環境に遷移

#psql -U postgres

ここからPostgreSQL環境に遷移 hitachi,toushiba,jfe,sharpのデータベースを作る。それぞれのデータベースにstockというテーブルを作っていくが一部変数定義をintではなくrealに変更する。ここではhitachiを例にする

hitachi=#CREATE TABLE stock(Date varchar(10),Open int,High int,Low int,Close int,Ave5day real,Ave25day real,Ave75day real,VWAP real,Vol int,Vol5day int,Vol25day int);

テーブルができたので、ここにcsvファイルからimportしていく。 終了したらPostgreSQL環境からDocker環境に戻る。 d:money/money1で別のWindows環境を起動する。ホルダ内にmain.goがあることを確認しておく。 シミュレーションプログラムを実行。このプログラムは一つのデータベースに対して実行されるのでhitachiデータベースのシミュレーションがしたい場合はプログラムの一部を書き換えて計4回実行し結果をcsvファイルの書き込む。

>go run main.go > hitachi.cvs

csvファイルのヘッダを「date,close,stock_value,cash,hitachi」にする。何故か文字コードがutf16LEになっているのでutf-8に強制的に変更した。

Window10からjupyter notebookを起動していろいろグラフを書いてみる。最後のグラフが4つ要素があるのにグラフが3つしかないようにみえるのはtoshiba.csvのデータとSharp.csvファイルのデータが同一なので上書きされて3つにしか見えないように見える。

Pythonではじめる数理最適化

7章 商品推奨のための興味のスコアリング

◆rcenとfreqに対して 再閲覧確率pred_probを推定する
◆pred_probはrcenについて単調減少する
◆pred_probはfreqについて単調増加する
◆pred_probとprobの二乗誤差を総件数の重み付けで最小化する
f:id:bitop:20220123083109p:plain
rcen(最近閲覧したか。数字が小さいほど最近見た)
freq(閲覧した回数)
rcenが小さく、freqが大きいほどpred_probが大きくなってるのがグラフから読み取れる

Pythonではじめる数理最適化

6章 数理最適化APIとWebアプリケーションの開発

Flackを使ってWebアプリケーションを作り数理最適化の自動化を図る
【問題】  サークルにおける学生の乗車グループ分け。

◆学生をどの車に割り当てる
◆乗車人数が定員を超えてはいけない
◆運転免許証を持っている学生を1人以上割り当てる
◆各学年の学生を一人以上車に割り当ている
◆男女それぞれを一人以上車に割り当てる

f:id:bitop:20220122140224p:plain

学生データファイルと車データファイルを割り当てて最適化を実行させる。
f:id:bitop:20220122140444p:plain

Pythonではじめる数理最適化

5章 コストを最小化する輸送車両の配送計画

【問題】
◆最適化対象期間
◆地理
地点の集合
自社の拠点
移動時間
◆注文
 届け先地点
 配送指定期間
 重量
 配送を外部に委託した場合の費用
◆トラックの運用
 所定労働時間
 トラックの最大積載量
 1時間当たりの残業代
 最大残業時間

自社の拠点と配送先のプロット
f:id:bitop:20220115154156p:plain
求解のプロット
f:id:bitop:20220115160757p:plain

Pythonではじめる数理最適化

4章 割引クーポンキャンペーンの効果最大化

【問題】 限られたキャンペーン予算で最大の来客増加数を最大にする

・ダイレクトメールの種類。1.セールのチラシのみ 2.セールのチラシと1000円のクーポン 3.セールのチラシと2000円のクーポン
・各会員に対してどのパターンのダイレクトメールを送付するかを決定
・各会員に対して送付するダイレクトメールはいずれかの1パターン
・会員の予算消費期待値の合計は100万円以下
・各パターンのダイレクトメールをそれぞれのセグメントに属する会員の10%以上に送付

◆会員データ
f:id:bitop:20220110090759p:plain
customer_id 会員ID
age_cat 年齢層(20-34,35-49,50-)
freq_cat 来店頻度(freq0,freq1,freq2,freq3-)
f:id:bitop:20220110091157p:plain
f:id:bitop:20220110091227p:plain
最適化計算の結果、約326人の増加が見込めるとのこと
f:id:bitop:20220110091813p:plain
各セグメントに対するそれぞれのダイレクトメールの送付率
傾向としてはクーポン付きメールは、いまだ来店していない顧客に送るのが有効との解釈ができる
f:id:bitop:20220110092003p:plain

Pythonではじめる数理最適化

2.3 規模の大きな数理最適化問題Pythonの数理最適化ライブラリで解く

【問題】 工場でp1,p2,p3,p4の製品を作っている。製品を製造するには原材料m1,m2,m3が必要でその情報はcsvファイルに記録されている。

m1 m2 m3
p1 2 0 1
p2 3 2 0
p3 0 2 2
p4 2 2 2

f:id:bitop:20220109083400p:plain

f:id:bitop:20220109083428p:plain
解  
f:id:bitop:20220109083640p:plain

3章 学校のクラス編成

【制約条件、目的】
・学年の全生徒をそれぞれ1つのクラスに割り当てる。学年で318人でクラス数は8
・各クラスの人数は39人以上、40人以下とする
・男子が158人、女子は160人
・各クラスの男子生徒、女子生徒は20人以下
・学力試験は500点満点で平均点は303.6点、各クラスの学力テストの平均点は学年平均±10点とする
・リーダー気質の生徒が17人おり、各クラスにリーダー気質の生徒を2人以上割り当てる
・学年に特別な支援が必要な生徒が4人おり、各クラスに一人以下とする
・学年に特定ペアが3組いる。特定ペアの生徒は同一クラスに割り当てない。(特定ペアとは双子ペアとか)

◆生徒名簿
f:id:bitop:20220109094354p:plain
◆生徒の性別確認
f:id:bitop:20220109094503p:plain
◆学年試験の点数の分布
f:id:bitop:20220109094619p:plain
◆解(studentの番号が生徒番号)、クラスはAからHまである。 f:id:bitop:20220109094732p:plain