-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
works duration calculation fixed for stage modes in in both timelines
work time estimator's signature updated scheduling examples added
- Loading branch information
1 parent
78debc1
commit 9c3a1cf
Showing
16 changed files
with
55,912 additions
and
437 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
150 changes: 150 additions & 0 deletions
150
examples/dormitory_field_dev_demo_with_granular_new_measurements.csv
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
activity_name;granular_name;volume;measurement;granular_measurement | ||
Бурение лидерных скважин;Бурение лидерных скважин;25.0;шт;шт | ||
Установка в скважины свай;Установка в скважины свай;18.0;шт;шт | ||
Монтаж оголовников;Монтаж оголовков;14.0;шт;шт | ||
Монтаж ростверков и опорных конструкций под порталы, опоры ВЛ;Монтаж ростверков и опорных конструкций под порталы, опоры вл;4.0;шт;шт | ||
Сборка опор/порталов;Сборка опор/порталов;2.0;шт;шт | ||
Установка опор/порталов;Установка опор/порталов;2.0;шт;шт | ||
Подвеска провода;Подвеска провода;200.0;м.;м | ||
Подвеска грозозащитного троса;Подвеска грозозащитного троса;160.0;м.;м | ||
Укладка полосового заземления;Укладка полосового заземления;24.0;м.;м | ||
Укладка активного соляного заземления;Укладка активного соляного заземления;35.6;шт;шт |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
import math | ||
from itertools import chain | ||
from operator import attrgetter | ||
from random import Random | ||
from sampo.schemas.time import Time | ||
|
||
from typing import Type | ||
|
||
from sampo.utilities.collections_util import build_index | ||
from sampo.schemas import WorkTimeEstimator, WorkUnit, Worker, WorkerReq, WorkEstimationMode, WorkerProductivityMode | ||
from idbadapter import MschmAdapter, Schedules | ||
from stairsres.res_time_model import ResTimeModel | ||
|
||
URL = "postgresql+psycopg2://testuser:[email protected]:25432/test" | ||
|
||
dbwrapper = MschmAdapter(URL) | ||
model = ResTimeModel(dbwrapper) | ||
|
||
|
||
class FieldDevWorkEstimator(WorkTimeEstimator): | ||
def __init__(self, | ||
rand: Random = Random()): | ||
self._use_idle = True | ||
self._estimation_mode = WorkEstimationMode.Realistic | ||
self.rand = rand | ||
self._productivity_mode = WorkerProductivityMode.Static | ||
|
||
def estimate_time(self, work_unit: WorkUnit, worker_list: list[Worker]): | ||
w_u = {'name': work_unit.name.split('_stage_')[0], | ||
'volume': work_unit.volume, | ||
'measurement': work_unit.volume_type} | ||
w_l = [{'name': w.name, '_count': w.count} for w in worker_list] | ||
name2worker = build_index(worker_list, attrgetter('name')) | ||
if self._estimation_mode == WorkEstimationMode.Realistic: | ||
mode_str = '0.5' | ||
elif self._estimation_mode == WorkEstimationMode.Optimistic: | ||
mode_str = '0.1' | ||
else: | ||
mode_str = '0.9' | ||
|
||
for res_req in work_unit.worker_reqs: | ||
if name2worker.get(res_req.kind, None) is None: | ||
w_l.append({'name': res_req.kind, '_count': 0}) | ||
if w_u['name'] in ['Начало работ по марке', 'Окончание работ по марке', 'NaN', 'start of project', | ||
'finish of project']: | ||
return Time(0) | ||
try: | ||
return Time(int(model.estimate_time(work_unit=w_u, worker_list=w_l, mode=mode_str))) | ||
except: | ||
print(w_u['name']) | ||
|
||
def find_work_resources(self, work_name: str, work_volume: float, measurement: str = None, | ||
resource_name: list[str] | None = None) \ | ||
-> list[WorkerReq]: | ||
if work_name in ['Начало работ по марке', 'Окончание работ по марке', 'NaN', 'start of project', | ||
'finish of project']: | ||
return [] | ||
worker_req_dict = model.get_resources_volumes(work_name=work_name, work_volume=work_volume, | ||
measurement=measurement) | ||
avg_work_duration = 1 | ||
if worker_req_dict: | ||
w_l = [{'name': req['kind'], '_count': req['volume']} for req in worker_req_dict['worker_reqs']] | ||
avg_work_duration = model.estimate_time({'name': work_name, | ||
'volume': work_volume, | ||
'measurement': measurement}, w_l) | ||
|
||
# worker_reqs = [[WorkerReq(kind=req['kind'], | ||
# volume=Time(math.ceil(req['volume'] / avg_work_duration)), | ||
# min_count=math.ceil(req['min_count'] / avg_work_duration) if (req[ | ||
# 'min_count'] != 0.0 and | ||
# req[ | ||
# 'volume'] != 0.0) or ( | ||
# req[ | ||
# 'min_count'] == 0.0 and | ||
# req[ | ||
# 'volume'] == 0.0) else 1, | ||
# max_count=math.ceil(req['max_count'] / avg_work_duration)) for req in worker_req] for | ||
# worker_req in | ||
# worker_req_dict.values()] | ||
worker_reqs = [[WorkerReq(kind=req['kind'], | ||
volume=Time(req['volume']), | ||
min_count=req['min_count'], | ||
max_count=req['max_count']) for req in worker_req] for | ||
worker_req in | ||
worker_req_dict.values()] | ||
return list(chain.from_iterable(worker_reqs)) | ||
|
||
def set_estimation_mode(self, use_idle: bool = True, mode: WorkEstimationMode = WorkEstimationMode.Realistic): | ||
self._use_idle = use_idle | ||
self._estimation_mode = mode | ||
|
||
def set_productivity_mode(self, mode: WorkerProductivityMode = WorkerProductivityMode.Static): | ||
self._productivity_mode = mode | ||
|
||
def get_recreate_info(self) -> tuple[Type, tuple]: | ||
return FieldDevWorkEstimator, () |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
activity_name;granular_name;volume;measurement;granular_measurement | ||
Изготовление свай;Изготовление металлических свай;1496.0;шт;шт | ||
Бурение скважин;Бурение скважин;1496.0;шт;шт | ||
Погружение свай;Погружение свай;1496.0;шт;шт | ||
Заполнение полости свай ЦПС;Забивка свай;1500.0;шт;шт | ||
Срезка свай, монтаж оголовков;Срезка голов металлических свай;1496.0;шт;шт | ||
Засыпка пространства между сваями щебнем фракции 15-20 мм;Отсыпка площадки щебнем;82.8;м3;м3 | ||
Монтаж деформационных марок;Монтаж деформационной марки;100.0;шт;шт | ||
Монтаж траверс;Монтаж траверс;945.0;шт;шт | ||
Монтаж м/к (связи, стойки, упоры, подкосы);Монтаж металлоконструкций (м/к);148.6;шт;шт | ||
Устройство термометрических скважин;Устройство термометрических скважин;11.0;шт;шт | ||
Монтаж термометрических трубок;Монтаж термометрической трубки;59.0;шт;шт | ||
Устройство песчанной подушки;Устройство песчаного основания (подушки);144.47;м3;м3 | ||
Укладка габионов;Укладка георешетки, габионов;92.0;м2;м2 | ||
Заполнение габионов щебнем фракции 70-120мм;Укладка геосеток, георешеток, габионов с заполнением щебнем;247.97;м2;м2 | ||
Монтаж термостабилизаторов;Монтаж термостабилизаторов;81.0;шт;шт | ||
АКЗ свай и металлоконструкций;АКЗ свай и металлоконструкций (м/к);11017.0;м2;м2 | ||
Монтаж опор DN 500 (неподвижная, направляющая, скользящая);Монтаж опор;84.0;шт;шт | ||
Сварка газопровода 530х24 мм;Сварка трубопроводов;203.0;стык;стык | ||
Надземная прокладка газопровода 530х24 мм;Прокладка наружной канализации;1267.12;м;м | ||
Монтаж опор метанолопровода;Монтаж опор трубопровода;238.0;шт;шт | ||
Сварка метанолопровода 57х6мм;Автоматическая сварка труб;121.0;стык;стык | ||
Надземная прокладка метанолопровода 57х6мм;Провод для систем опс, прокладываемый по металлическим основаниям;1200.17;м;м | ||
Монтаж заземления;Монтаж заземлений;100.0;м;м | ||
Очистка полости трубопроводов;Очистка полости трубопровода;100.0;м3;м3 | ||
Гидроиспытания трубопроводов;Гидроиспытания резервуара;100.0;шт;шт | ||
Изоляция сварных соединений газопровода;Изоляция сварных стыков;203.0;стык;стык |
Oops, something went wrong.