---
# System prepended metadata

title: 協和商会 ロジックメモ
tags: [ROX, 協和商会]

---

# 協和商会 ロジックメモ
###### tags: `ROX` `協和商会`
- 2021 01 20

## テーブル, データ
- https://docs.google.com/spreadsheets/d/1IK-rorzaxdEYtn7gMT-egvqauFroQ4VyrnCoxYNQnFg/edit?usp=sharing

### SQLServer 運送計画履歴テーブル　delivery_plan_logs	

### SQLServer 運送履歴テーブル　delivery_logs	


### 連携データ　対象日以降業務一覧
- 積んでいない運送依頼 + ヤードにある荷物の運送依頼
- トラックに積んで下さずに終わった荷物は連携する？ 
    - delivery_logs


## ロジック
### 頻度ベース
1. 対象日の前日に積んだままの荷物で、納品日が対象日の業務について、計画に埋め込む
    - delivery_logsについて、`積み込み日==対象日より前 & 納品日==対象日 & is_yard==0`の業務を抽出し、荷下ろし業務を計画に埋め込む
3. 対象日以前に荷積をして、ヤードに保管しており、納品日が対象日の業務について、計画に埋め込む
    - delivery_logsについて、`積み込み日==対象日より前 & 納品日==対象日 & is_yard==1`の業務を抽出し、荷下ろし業務を計画に埋め込む
5. 対象日以降業務一覧(連携データ)から、積み日&納品日が対象日の業務について、計画に埋め込む
    - 対象日以降業務一覧について、`積み込み日==対象日 & 納品日==対象日 & is_yard==0`の業務を抽出し、荷積&荷下ろしの業務を計画に埋め込む
7. 対象日以降業務一覧(連携データ)から、積み日が対象日、納品日が対象日よりも未来、ヤードを使用しない業務(==トラックに積んでおいて翌日以降に納品する業務)について、計画に埋め込む(ヤードの使用について、正しいか確認する必要あり)
    - 対象日以降業務一覧について、`積み込み日==対象日 & 納品日==対象日より未来 & is_yard==0`の業務を抽出し、荷積の業務を計画に埋め込む
9. 対象日以降業務一覧(連携データ)から、積み日が対象日、納品日が対象日よりも未来、ヤードを使用する業務について、計画に埋め込む
    - 対象日以降業務一覧について、`積み込み日==対象日 & 納品日==対象日より未来 & is_yard==1`の業務を抽出し、荷積の業務を計画に埋め込む
    - 荷下ろしは計画上発生しないが、ヤードへの荷下ろしが行われる
11. 作成された計画を元に、計画上では対象日に行われる業務について、delivery_plan_logs, delivery_logsと同様の形式のデータを作成し、delivery_plan_logs_tmp, delivery_logs_tmpに保存
12. 対象日以降業務一覧に現在の対象日よりも未来日付の積み日or納品日があれば、対象日を+1する
13. delivery_plan_logsとdelivery_plan_logs_tmp, delivery_logsとdelivery_logs_tmpをそれぞれ結合し、作成した計画通りに業務が遂行されたと仮定して新たな配送履歴テーブルを作成する
14. 1に戻る

- トラックに積みっぱなし、ヤードに置く荷物の違いを確認

### 位置情報ベース
- 各トラックor従業員ごとにゴールの情報を持たせる
- 特定のトラックにしか運べない荷物について、フラグを立てて別の処理を行う？
- ヤードは一箇所？
1. 頻度ベースの1について計画に埋め込む
    - トラックに積んでそのままの荷物については、事前に積んだトラックがそのまま使われるから組み合わせを考える必要ない
    - 一部従業員の最初の業務確定
2. 全従業員の最後の業務を確定させる
    - 各従業員のゴールと業務のゴールの距離が小さくなるように業務を割り振る

### 頻度＋位置情報
#### memo 20220123
- 最初と最後の業務を位置情報で決定
- 中間の業務を頻度（最初＋中間, 中間＋最後）で判定を行う

- yyyymmdd
- a ⇨ b (1)
- c ⇨ d (2)
- e ⇨ f (3)

- b-c, d-e

- yyyymmdd
- a ⇨ b 
- c ⇨ d 
- e ⇨ f 

- b-c, d-e


- yyyymmdd
- [a ⇨ b] ⇨ [c ⇨ d] ⇨ [e ⇨ f]

#### memo 202120203
- 要確認
    - 各トラックの初期位置と最終位置の情報
    - 配送先の位置情報
    - それぞれの拠点について、拠点においてあるトラックの台数 < 拠点のヤードにおいてある荷物で1日に配送なければならない業務の数となるか
        - 下記のlogic2について、ヤードの荷物はorder１に割り当てるようにするので、上記のような状態になると破綻する
        - ヤードの荷物を他の業務と同様に考える？そうすれば破綻しない
            - 積み地が拠点になるようにして、ほかの業務と同一のものと考えて処理する（logic2,3を一緒に処理する）
    - 従業員＝トラックの休みは入力として受け取るか？
    - ヤード使う/使わない, トラックに積みっぱなしにする/しない の判断が明確なルールか
    - 特定のトラックでのみ遂行できる業務はどうするか？（再）
        - inputで協和から受け取るか
    - 積み込み日_積み込み地_納品日_納品地をdelivery_idにして問題ないか
        - IDが重複するような業務が発生することはあるか？
    - オーダー確認書の車番について、どのタイミングで確定しているのか


#### logic
##### order1を埋める
1. すべてのトラックについて操作：**対象日の前日にトラックに積んだまま＆納品日が対象日の業務**について、同一トラックの対象日の最初の業務(order=1)とする
    - 前日の業務logから探す or inputで協和から受け取る
3. ヤードにおかれている荷物で納品日が対象日の業務について、**order1が埋まっていない＆トラックの初期位置とヤードの距離が近い**トラックに業務（order=1)を割り振る
    - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
    - 前日の業務logから探す or inputで協和から受け取る
4. order1が埋まっていないトラックがなくなるまで操作する：各トラックの初期拠点と各業務（積み込み日＝対象日＆納品日＝対象日）の積み地が近くなるようにトラックに業務（order1）を割り振る
    - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
    - inputで協和から受け取る

##### order3を埋める
5. **積み日が対象日＆納品日が未来日&ヤードを使う業務**について、積み地とトラックの最終拠点が近くなるようにトラックに業務を割り振る（order3)
    - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
    - inputで協和から受け取る
6. **積み日が対象日＆納品日が未来日&ヤードを使わない業務**について、積み地とトラックの最終拠点が近くなるように(order3に業務が入っていない)トラックに業務を割り振る（order3)
    - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
    - inputで協和から受け取る
7. order3が埋まっていないトラックがなくなるまで操作する：各トラックの最終拠点と各業務（積み込み日＝対象日＆納品日=対象日）の納品地が近くなるようにトラックに業務（order3）を割り振る
    - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
    - inputで協和から受け取る

##### order2を埋める
8. 残りの積み日=対象日 AND 納品日=対象日の業務がなくなるまで,もしくはすべてのトラックの予定が埋まるまで操作する：
    - 対象業務と同一の[積み地-納品地]の業務を過去にこなしている回数
    - [対象業の積み地-各トラックのorder1の業務の納品地]の移動をこなしている回数
    - [対象業の納品地-各トラックのorder3の業務の積み地]の移動をこなしている回数
    - これらの優先順位は？
    - 埋めていく業務の優先順位は？
    - inputで協和から受け取る


- ヤードについて、別の拠点のトラックが別のヤードに取りに行く可能性の検討
    - 回避する方法は？
- delivery_idの取り扱い変更
    - 積み込み日_積み込み地_納品日_納品地だと重複する可能性がある


#### memo 20220207

- delivery_idの取り扱い変更
    - 積み込み日_積み込み地_納品日_納品地_トラックID
        - 一台のトラックが積み込み日_積み込み地_納品日_納品地が同じ業務を複数回行うケースがないか確認
            - あった：10/7, 28番
        - 積み込み日_積み込み地_納品日_納品地_トラックID_シーケンス
            - 多分大丈夫
- 着手中の業務について（トラックに積みっぱなしの業務、ヤードにおいてある業務）
    - logから特定する場合、協和から受け取る「こなした業務のデータ」に問題（フォーマットが異なるなど）がありインプットを受け取れない状態になるとlogから拾えなくなる
    - 毎度受け取る場合、未来日以降の業務の受け取りと同様に扱う

- ヤードについて、別の拠点のトラックが別のヤードに取りに行く可能性の検討
    - 上記コピー
        - ヤードにおかれている荷物で納品日が対象日の業務について、**order1が埋まっていない＆トラックの初期位置とヤードの距離が近い**トラックに業務（order=1)を割り振る
            - 距離が同一でトラックの候補が複数出た場合は頻度で順位をつける
            - 前日の業務logから探す or inputで協和から受け取る
    - 変更案
        - ヤードから荷物を下ろし運送する業務はその拠点（＝ヤード）に所属するトラックが担当する
        - 拠点ごとに処理する
            - その拠点のヤードからの業務がなくなる or その拠点所属のトラックの業務が埋まるまで
            - 余った業務は余りとして出力して人間にまかせる

- memo
    - オーダー確認書
        - 「ヤード出し25」は何を意味する？, ヤードに置く荷物であること＋置く場所？
            - 25が積んでヤードに下ろす、オーダーの車番のトラックが後日に納品
        - JFE千葉＝川鉄

    - 下ろした地点から近いヤードの荷物をとりにいくとき、別の拠点所属のトラックが取りに行くことは可能か？
    - 1案件2レコード, 1行動（1オーダー）あたり2レコードor1レコード
    - solverはきびしそう
        - トラックに積んで、後日運送するような業務の場合、solverで業務の順序を移動距離以外で制御する必要があるため厳しそう
    - yardから運送する荷物について、前日にヤードからトラックに積む作業は必ず発生するか？
    - 配車表とオーダー確認書に差分がある場合、どっちが正？
    - 配車表、未はなに？
    - オーダー表に乗らない業務のto, from, 積み日, 納品日, ヤードの有無がわからない
    - 地点設定.csv
        - NK T.D 川鉄はどこ？
        - 新頭陽 = 東京豆陽金属工業?
    - inputのデータに、システム稼働時点でトラックに乗せたままで未来日納品の荷物については、何番のトラックに載せているのか連携が必要
    - 2021/10/01積み、2021/10/03納品、ヤード使わない場合、2021/10/02が休みのトラックに積ませる？
        - 実装できる？