Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системотехника строительства. Учебно-методическое пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
ПРИЛОЖЕНИЕ
Пример решения задачи для двух машин на языке PHP
<?php
//Определяем исходные параметры для расчета $sam_work = 4; //Математическое ожидание времени работы самосвала $sam_ubit = 500; //Убытки от простоя самосвала $sam_prib = 4000; //Прибыль от работы самосвала
$eks_work = 6; //Математическое ожидание времени работы экскаватора $eks_ubit = 6000; //Убытки от простоя экскаватора $eks_prib = 8000; //Прибыль от работы экскаватора
$sam_rem = 1; //Математическое ожидание времени ремонта самосвала $eks_rem = 2; //Математическое ожидание времени ремонта экскаватора
$zp = 2000; //Зарплата одной бригады $nak = 500; //Накладные расходы на одну бригаду слесарей (простой од-
ной бригады)
$prof_zp = 1000; //Зарплата бригады при профилактике
$work = 16; //Время работы техники в часах $prof = 8; //Время проилактики в часах
$days = 10000; //Количество дней работы машины в данной модели
//Определяем функции для расчета //Функция получения случайной величины по математическому ожиданию
(экспоненциальный закон распределения)
function get_rand($mat) { $x = mt_rand(1, 1000); $x = $x/1000; $x = -1*$mat*log($x); return $x; }
//Функция расчета общего времени работы и простоя двух машин в один
день с учетом количества доступных ремонтных бригад
function count_day($b){
//Начальные значения переменных:
$b=intval($b); $start_b=$b; global $sam_work; global $eks_work; global $sam_rem; global $eks_rem;
global $work; global $prof; global $days;
$total_work_eks = 0; $total_work_sam = 0; $total_rem_eks = 0; $total_
rem_sam = 0; $total_off_eks = 0; $total_off_sam = 0;
$point_time = 0; $total = 0; $i = 0; $eks = ‘on’; $sam = ‘on’;
$eks_work_now = get_rand($eks_work); $sam_work_now = get_rand($sam_ work); $eks_rem_now = get_rand($eks_rem); $sam_rem_now = get_rand($sam_ rem);
$nak_time = $work*$b;
41
//Моделируем контрольные точки в течение дня
while($point_time < $work){
if($eks==’on’ && $sam==’on’)
$point = min($eks_work_now, $sam_work_now);
elseif($eks==’on’ && $sam==’rem’)
$point = min($eks_work_now, $sam_rem_now);
elseif($eks==’rem’ && $sam==’on’)
$point = min($eks_rem_now, $sam_work_now);
elseif($eks==’rem’ && $sam==’rem’)
$point = min($eks_rem_now, $sam_rem_now);
elseif($eks==’rem’ && $sam==’off’)
$point = $eks_rem_now;
elseif($eks==’off’ && $sam==’rem’)
$point = $sam_rem_now;
else break;
$min=$point;
$point_time = $point_time + $point;
if($point_time>$work)
$point = $point-$point_time+$work;
if($min == $eks_work_now) {
if($min==$point){
if($b>0){
$eks=’rem’;
$b=$b-1;
}
else
$eks=’off’;
}
$total_work_eks=$total_work_eks+$point;
if($sam == ‘off’)
$total_off_sam=$total_off_sam+$point;
elseif($sam == ‘rem’){
$total_rem_sam=$total_rem_sam+$point;
$sam_rem_now = $sam_rem_now — $point;
}
elseif($sam == ‘on’) {
$total_work_sam=$total_work_sam+$point;
$sam_work_now = $sam_work_now — $point;
}
$eks_work_now = get_rand($eks_work);
}
elseif($min == $sam_work_now) {
if($min==$point){
if($b>0){
$sam=’rem’;
$b=$b-1;
}
42
else
$sam=’off’;
}
$total_work_sam=$total_work_sam+$point;
if($eks == ‘off’)
$total_off_eks=$total_off_eks+$point;
elseif($eks == ‘rem’){
$total_rem_eks=$total_rem_eks+$point;
$eks_rem_now = $eks_rem_now — $point;
}
elseif($eks == ‘on’) {
$total_work_eks=$total_work_eks+$point;
$eks_work_now = $eks_work_now — $point;
}
$sam_work_now = get_rand($sam_work);
}
elseif($min == $eks_rem_now) {
$total_rem_eks=$total_rem_eks+$point;
$b = $b+1;
$eks=’on’;
if($sam == ‘off’) {
$total_off_sam=$total_off_sam+$point;
$sam = ‘rem’;
$b=$b-1;
}
elseif($sam == ‘rem’){
$total_rem_sam=$total_rem_sam+$point;
$sam_rem_now=$sam_rem_now-$point;
}
elseif($sam == ‘on’) {
$total_work_sam=$total_work_sam+$point;
$sam_work_now = $sam_work_now — $point;
}
$eks_rem_now = get_rand($eks_rem);
}
elseif($min == $sam_rem_now) {
$total_rem_sam=$total_rem_sam+$point;
$b = $b+1;
$sam=’on’;
if($eks == ‘off’) {
$total_off_eks=$total_off_eks+$point;
$eks = ‘rem’;
$b=$b-1;
}
elseif($eks == ‘rem’){
43
$total_rem_eks=$total_rem_eks+$point;
$eks_rem_now=$eks_rem_now-$point;
}
elseif($eks == ‘on’) {
$total_work_eks=$total_work_eks+$point;
$eks_work_now = $eks_work_now — $point;
}
$sam_rem_now = get_rand($sam_rem);
}
}
$nak_time = $nak_time-$total_rem_eks-$total_rem_sam;
$array = array(‘total_work_eks’ => $total_work_eks,
‘total_work_sam’ => $total_work_sam,
‘total_rem_eks’ => $total_rem_eks,
‘total_rem_sam’ => $total_rem_sam,
‘total_off_eks’ => $total_off_eks,
‘total_off_sam’ => $total_off_sam,
‘nak_time’ => $nak_time
);
return $array;
}
//Функция расчета экономического эффекта
function count_effect($total_work_eks,$total_work_sam, $total_rem_ eks, $total_rem_sam, $total_off_eks, $total_off_sam, $nak_time, $b) {
global $sam_ubit; global $sam_prib; global $eks_ubit; global $eks_ prib; global $zp; global $nak; global $prof_zp; global $work; global $prof; global $days;
$total_rem = $total_rem_sam+$total_rem_eks;
$effect = ($total_work_eks*$eks_prib)+($total_work_sam*$sam_prib)­($total_rem_eks*$eks_ubit)-($total_rem_sam*$sam_ubit)-($total_off_ eks*$eks_ubit)-($total_off_sam*$sam_ubit)-($total_rem*$zp)-($nak_ time*$nak)-($days*$prof*$prof_zp*$b);
return $effect;
}
//Цикл расчета экономической эффективности работы разного числа бри­гад (от 1 до 5)
for($b = 1; $b<=5; $b++){
$total_work_eks = 0; $total_work_sam = 0; $total_rem_eks = 0; $total_ rem_sam = 0; $total_off_eks = 0; $total_off_sam = 0; $total_rem = 0; $nak_time = 0;
//Суммирование значений при заданном количестве дней
for($day=1; $day<=$days; $day++){
$result = count_day($b);
foreach($result as $key=>$value)
$$key = $$key+$value;
}
44
$effect_array[$b] = count_effect($total_work_eks, $total_work_sam, $total_rem_eks, $total_rem_sam, $total_off_eks, $total_off_sam, $nak_ time, $b);
}
//Выводим количество бригад, являющихся наиболее экономически эффек­тивными
echo ‘Оптимальное число бригад: ‘.array_search(max($effect_
array),$effect_array);
?>
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]