From fe5ea1a28491eb63ae950408808a5f40687b8cc4 Mon Sep 17 00:00:00 2001 From: Cricial <2911646453@qq.com> Date: Tue, 24 Sep 2024 19:21:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0end=E5=A4=84=E7=90=86result?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/csv-editor.xml | 14 ----------- __pycache__/computation.cpython-38.pyc | Bin 1425 -> 1458 bytes __pycache__/firm.cpython-38.pyc | Bin 11523 -> 11523 bytes __pycache__/my_model.cpython-38.pyc | Bin 14682 -> 15574 bytes computation.py | 6 ++--- main.py | 2 +- my_model.py | 33 ++++++++++++++++++++++++- 7 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.idea/csv-editor.xml b/.idea/csv-editor.xml index 29b9e5e..c176510 100644 --- a/.idea/csv-editor.xml +++ b/.idea/csv-editor.xml @@ -66,13 +66,6 @@ - - - - - - @@ -80,13 +73,6 @@ - - - - - - diff --git a/__pycache__/computation.cpython-38.pyc b/__pycache__/computation.cpython-38.pyc index 7c87c9dd0d1100a22787bca18bec1f402e9dd429..7c722c738015d1fb2c5f882e776e0301c867149b 100644 GIT binary patch delta 259 zcmbQpy@{JQl$V!_0SHdod`jE1k#{{KBmd;Rj1G*uCjVocqAF9%R>Qi0e<1@SLkV*Y zTM1hh+XD8549!f8422VbG6Eo($@7^y7;jD1VAf-lpB&EY!OjRY&rMTs@-k*)elZ~X z7Dq~ANoq-EZtAVcFPP<|C4gc@EFcNiqQt!P)LSgYC8-6sm{apoCd;rGs@!7D%}+_q zxy6`S!~;?)0wQ=p>Y0m5^FX{}oymnPDqPGQj694Sj6#eYlV`KI$*F+Ufps7VkhUT= aAi+ENKZ_)z^khlad`>1FAY@_WVFm!{2s~8) delta 208 zcmdnQJ&~I?l$V!_0SIQzc$8MRk#{{Kqrl|7j1G*8CjVoc!pl?3R>Qi0e<1@SL*azU z+nG8Tqb55r>oF=!&S&;uPXX$4(-fGzkJ*@C6v)2Ck&;-FT9TQY8a0VUj!}HFJd5aL zOBO?wDAwHkl+>JCjG09|Ky^jJAc7a9gSn_Q52UqNV{#vh3L6UtBM&3jlpK0D_%zpEh#;&;bB9E(PcS delta 20 acmZpUYL4O#<>lpK0D|t*?>2J(&;bBB<_2Q` diff --git a/__pycache__/my_model.cpython-38.pyc b/__pycache__/my_model.cpython-38.pyc index c0d57124b28574e28bf7d6ba74273b7abbb8397f..80403bf8bea083f2e3b5411a4a140241e1d63d82 100644 GIT binary patch delta 4120 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 OViY0)paKM*uKxljB$QbI delta 3347 zcma)8Yit}>6`s3~@jmVK`Vq&E#Eu`yxNQ>0j-AAgTQ^Z0=i#<7iQ6g3dgB>8+sy7d zcgDf3(%4NxptNdZE(IbaHv!S&QWe^zP(UJqra~1z097C{q6qN=DMIiM${#4_yBn{w z3sTwDe*4{X&$;Ju&%HChebVLSN2Ae@LZ9b;@wchnpI$6)WDAS;tef{4ioqdTF4CAju?Bj>&m7skjw+K{`2?aCjy+>OWbf_)}S;W({1d2Q&j(01e_;VEe`$pgRd%X1YEj=_L6s zh$QrbZ6P?2dn<67sk<>A6s@7(k&l0c?yD_mxuF3gHR()d(=&rv@j!TA-4Jvi1nePj z)v1(aWs>|Mu@v6M+QhHJ4Q!40Yq*8&5EYSw)pDgzL0vlCN^D$YA|HegLUsr+C>Cm} z#YA*-?_nBJc~vKCrEEv@@*|iZBXIrGJUcs6n!{0=IxlWTFON$$vzscBP%Bo4cA8Uz99l$arBtD82mlv7J@?H_UDlhCDfu4uAVaXGDjv~0h8EzVh zsT5CBZZe3~+%lwaRh(~JE6U@Y719%Pz4mOH7CIt^g`m!(0R`G_9_+d$w(5U)9D+IE&x zx7()Usze>rkcFcHJ7(JEn@Km~dMz`s+hKv?CGC$LAnF50C-L++{%9 zNOmdLU41BD?1%egH=&1QGN?9jmt|abR`YOPSfaRcZ-}zmF}6=UUON_lZpD~CPmGMt zi<`A|sbYgSY03@|sEW!WO622FEx;FOyt-@o8iefG$vYL`vNGr|H;^=pglSBhS}?zn ztGPWZhSnTk$yGVja8Ud_F`rp-f5Hc>m;SsXQOx-|V942mQFk(j6-VK1(9 zX1AP`@B}H-$*V-fi5Z?XW+$D*B)Xt@g&U%wVPtC-OV1FX!RXHoN;`BXw=q|2^z)V8 z+%M%0G|m!`!?-MNGLVLGJG;3-F=w9(cv(;x1U1n}@Hj_FtYbH_#6-w@{KRIn? z9Gdba9fy}}?MI@kWsn^ZGcB9c{a9>7EVb@)aVDgnd<{A`;`^BGId)bm` zYU>U;XHFRkJ?w*{V!pCoG`Cmn@NnNbw&*!S?*RGYT%%>~6ptst89z;bC6#LyH`*5B zGM2jyEb&NtRmpwbChYd@F}xsf*WL^GpEvHQW-)KIS0p=L>X9y`AM6*${!ogt z(Y_7=*1Rjh@6xb0*SYa6#tw-OHyzmWV-hTT`0G$J!I{hEO03+#fR#+2G?IhE;+VFR zy6TFydlM}AO~6k9C63-D*$73=Z;8Ka2YNnP`H)m5D>`CBSnxq%cW!7L2YnQP+ns+8 zkR!lB6mNDm_Ps{~J&O0JMB3!j^eo;}qFNeS4_OT4eD|c;|B=IZK8LIKJ~RKxIXqU# zLA~n@W;KO35dC)${hjxff}k|U?WA;sRprW> z)BKtk>e;BuK1${?JvSJ$a+`YttfqLMU7zikGbhBszCU7?mLd7&C%E#4au=194Ye;0IMz}>xV2zfJ@P?7r*MS?QIIEf!aVsinSWv43$j) zWbFnrrt_IBKRqWO60SOv%os_V4~h1HeUEO0S`ttOkT;e*J8<#8d{g_U>A7o}gR~*} S9SN|AC%_0e=TH`a*& diff --git a/computation.py b/computation.py index dba191f..1e847ff 100644 --- a/computation.py +++ b/computation.py @@ -2,7 +2,6 @@ import os import datetime from mesa import Model - from typing import TYPE_CHECKING from my_model import MyModel @@ -37,8 +36,9 @@ class Computation: dct_sample_para = {'sample': sample_random, 'seed': sample_random.seed, **dct_exp} - model = MyModel(dct_sample_para) - for i in range(100): + for i in range(1): model.step() + print(i, datetime.datetime.now()) + model.end() return False diff --git a/main.py b/main.py index 902ddfa..2ac6aa7 100644 --- a/main.py +++ b/main.py @@ -40,7 +40,7 @@ def do_computation(c_db): exp = Computation(c_db) while 1: - time.sleep(random.uniform(0, 5)) + time.sleep(random.uniform(0, 1)) is_all_done = exp.run() if is_all_done: break diff --git a/my_model.py b/my_model.py index 6b3d276..415826a 100644 --- a/my_model.py +++ b/my_model.py @@ -1,5 +1,6 @@ import json from random import shuffle +import platform import networkx as nx import pandas as pd @@ -9,6 +10,7 @@ from mesa.datacollection import DataCollector import numpy as np from firm import FirmAgent +from orm import db_session, Result from product import ProductAgent @@ -292,7 +294,8 @@ class MyModel(Model): disrupted_products = [product for product in self.product_agents if product.unique_id in lst_product] # 将公司与其受干扰的产品映射到字典中 - t_dct[firm] = disrupted_products + if firm is not None: + t_dct[firm] = disrupted_products # 更新 self.dct_lst_init_disrupt_firm_prod 字典,存储公司及其受干扰的产品 self.dct_lst_init_disrupt_firm_prod = t_dct @@ -478,3 +481,31 @@ class MyModel(Model): # Increment the time step self.t += 1 + + def end(self): + # print('/' * 20, 'output', '/' * 20) + + qry_result = db_session.query(Result).filter_by(s_id=self.sample.id) + if qry_result.count() == 0: + lst_result_info = [] + for firm in self.company_agents: + for prod, dct_status_supply in \ + firm.dct_prod_up_prod_stat.items(): + lst_is_normal = [stat == 'N' for stat, _ + in dct_status_supply['p_stat']] + if not all(lst_is_normal): + # print(f"{firm.name} {prod.code}:") + # print(dct_status_supply['p_stat']) + for status, ts in dct_status_supply['p_stat']: + db_r = Result(s_id=self.sample.id, + id_firm=firm.unique_id, + id_product=prod.unique_id, + ts=ts, + status=status) + lst_result_info.append(db_r) + db_session.bulk_save_objects(lst_result_info) + db_session.commit() + self.sample.is_done_flag = 1 + self.sample.computer_name = platform.node() + self.sample.stop_t = self.int_stop_ts + db_session.commit()