0 / 0 / 1
Регистрация: 18.03.2014
Сообщений: 27
1

Задача по мат моделированию

05.12.2016, 22:04. Показов 1483. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу на Java(либо любом ООП) и любом языке типа Simula.
Задачка такая:
В школе имеется 100 компьютеров. Компьютеры периодически выходят из строя. Время нормальной работы распределено нормально с матожиданием 30 дней и дисперсией 15 дней. Время ремонта распределено равномерно от 1 до 3 дней. Сколько нужно ремонтников, для того что бы постоянно работало 90 компьютеров в будни дни.

Буду очень признателен за помощь, я просто даже не знаю с чего начать
Написал только методы генераторов чисел необходимые.

Нашел что-то на питоне только
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding: cp1251 -*-
import math
import random
 
compsPos = []
queue = {}
maxComp = 100
 
def getWorkTime():
    cv = math.floor(random.gauss(30, 15))
    if (cv < 0):
        cv = 0
    return cv
 
def addqueue(item):
    l = math.floor(random.gauss(2, 1))
    if l < 1:
        l = 1
    if l > 3:
        l = 3
    queue[item] = l
    print 'comp ',item,' added to queue for ',l,' days'
    
 
# первично заполняем массив компов их временами работы
for i in range(0, maxComp, 1):
    cv = getWorkTime()
    compsPos.append(cv)
 
print compsPos
rl = []
# дни
for i in range(365):
    print 'day ',i
    # цикл выходов из строя
    for j in range(0, maxComp, 1):
        # этот комп сейчас в ремонте
        if (j in queue.iterkeys()):
            continue
        # этот комп сломается 100%, так как ему работать 0 дней
        if (0 == compsPos[j]):
            addqueue(j)
            continue
        # иначе оцениваем вероятность поломки
        pos = 1-(1 / compsPos[j])
        # бросаем случайное числе
        # если оно больше вероятности поломки, то комп сломался
        # иначе работает
        cur = random.random()
        if (cur > pos):
            addqueue(j)
            continue
        # уменьшаем на 1 время работы компа        
        compsPos[j] = compsPos[j] - 1
    rl.append(len(queue))
    # цикл возвратов в строй
    for j in queue.keys():
        queue[j] = queue[j]-1
        # комп починен, возвращаем в строй
        if (0 == queue[j]):
            # задаём новое время работы
            cv = getWorkTime()
            compsPos[j] = cv
            print 'comp ',j,' returned with new time ',cv
            # удаляем из очереди
            del queue[j]
 
print rl
print max(rl)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2016, 22:04
Ответы с готовыми решениями:

мат.задача
Господа, если кто-то сталкивался или представляет решение следующей задачи, огромная просьба,...

Задание по мат. моделированию
Всем добрый день! Решая задание по мат. моделированию, в ходе решения столкнулся с проблемой. В...

Поиск литературы по мат. моделированию
Может кто знает какой литературой можно воспользоваться, чтобы подготовится к теме &quot;Модели эволюции...

задача по моделированию
выручите, вообще не разбираюсь в моделировании , задание прикреплю и есть схожий материал:wall:

2
Эксперт Java
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
06.12.2016, 13:55 2
с теории начни, опиши русским языком как эта хрень считается, кто-нибудь с программой поможет
0
0 / 0 / 1
Регистрация: 18.03.2014
Сообщений: 27
07.12.2016, 11:47  [ТС] 3
Лучший ответ Сообщение было отмечено DWfrya как решение

Решение

В общем на java написал. Кому интересно, выкладываю код.
Теперь нужно это как то на имитационный язык перевести.
Тогда в другом разделе открою тему. Задача по мат моделирвоанию
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.company;
 
import java.util.ArrayList;
 
public class Main {
    private long count = 0;
    private static long a = 4096;
    private static long c = 150889;
    private static long m = 714025;
    private static long seed = 23;
    static int maxComp = 100;
    static ArrayList<Comp> compList = new ArrayList<>();
    static ArrayList<Integer> repairList = new ArrayList<>();
    public static void main(String[] args) {
        for (int i = 0; i < maxComp; i++) {
            compList.add(new Comp(i, getWorkTime(), -1));
        }
        int kol[] = new int[365];
        int day=0;
        for (int i = 0; i < 365; i++) {
            System.out.println("day "+i);
            for (int j = 0; j < maxComp; j++) {
                if (compList.get(j).repairTime>0) {continue;}
                if (compList.get(j).workTime == 0 && compList.get(j).repairTime==-1) {
                    addqueue(j, compList.get(j));
                    repairList.add(compList.get(j).id);
                    continue;
                }
                if (day<5) compList.get(j).workTime--;
            }
            day++;
            kol[i]=repairList.size();
 
            for (int j = 0; j < repairList.size(); j++) {
                int idComp = repairList.get(j);
                if (compList.get(idComp).repairTime>0) compList.get(idComp).repairTime--;
                else if (compList.get(idComp).repairTime==0) {
                    compList.get(idComp).workTime=getWorkTime();
                    compList.get(idComp).repairTime=-1;
                    System.out.println("comp "+idComp+" returned with new time "+compList.get(idComp).workTime);
                    repairList.remove(j);
                }
            }
            if (day==7) day=0;
 
        }
        int max = kol[0];
        for (int i = 1; i < kol.length; i++) {
            if (kol[i]>max) max=kol[i];
        }
        System.out.println(max+" computers are broken max");
        System.out.println("need "+(max-10)+" workers");
 
    }
 
    public static int getWorkTime() {
        int cv = Normal(30, 15);
        if (cv<0) cv=30;
        return cv;
    }
 
    public static void addqueue(int item, Comp comp) {
        double l = Ravnomern(1,4);
        if (l<1) l =1;
        else if (l>3) l=3;
        int il = (int)(Math.round(l));
        comp.repairTime=il;
        System.out.println("comp "+item+" added to queue for "+il+" days");
    }
 
    public static int Normal(double mat, double dis)
    {
        double U = Math.random();
        double V = Math.random();
 
        double R1 = Math.sqrt(-2 * Math.log(U)) * Math.sin(2 * Math.PI * V);
        double R2 = Math.sqrt(-2 * Math.log(U)) * Math.cos(2 * Math.PI * V);
        double R = (R1 + R2) / 2;
        return (int)(R * dis + mat);
    }
 
    public static double getRand() {
        seed = (a * seed + c) % m;
        return seed / (double) m;
    }
 
    public static double Ravnomern (int a, int b){
        double ret = 0;
        ret = (b - a)*getRand() + a;
        return ret;
    }
}
 
package com.company;
 
/**
 * Created by Денис on 06.12.2016.
 */
public class Comp {
    int workTime, repairTime, id;
    public Comp(int id, int workTime, int repairTime) {
        this.id=id;
        this.workTime=workTime;
        this.repairTime=repairTime;
    }
}
0
07.12.2016, 11:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2016, 11:47
Помогаю со студенческими работами здесь

Задача по моделированию
Производственная мощность цеха сборки – 120 изделий типа A и 360 изделий типа B в сутки....

Подскажите какие-нибудь книги по мат. моделированию. Или что-нибудь еще в этом роде.
Вот и закончился курс дифференциальных уравнений, экзамен сдан. Хотелось бы спросить вот что....

Задача по имитационному моделированию
Доброго времени суток. Задание: Портовый терминал имеет 9 причалов. Приходящие большегрузные...

Задача по Моделированию систем.
Вот такое вот нужно сделать задание. Помогите, плз. =( ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru