39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
1

Расчет оптимального распределения заготовок по станкам с целью минимизации общего времени изготовления

30.11.2018, 22:44. Показов 700. Ответов 5
Метки нет (Все метки)

Доброго времени суток) Помогите найти алгоритм решения.

В токарном участке сборочного цеха установлены 3 станка. Участку нужно выпускать деталь.
1 станок выпускает ее за 3 минуты
2 станок за 5 мин
3 за 7 мин

Каждый день нужно выпускать разное кол-во деталей.

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

На входе программа принимает кол-во заготовок необходимое для производства. На выходе - распределение кол-ва деталей для каждого станка.

Пример
Входные данные: 7
Выходные данные: 4 2 1

Очень надеюсь на вашу помощь.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2018, 22:44
Ответы с готовыми решениями:

Найти закон распределения, МО и дисперсию числа заготовок, оставшихся после изготовления первой годной детали
Имеется 4 заготовки для одной и той же детали. Вероятность изготовления годной детали из каждой...

Напишите программу, которая рассчитает оптимальное распределение заготовок по станкам
Доброго времени суток) Помогите решить задачу. В токарном участке сборочного цеха установлены 3...

Расчет общего времени работы
Привет всем! Мне необходимо вычислить число часов и минут где есть записи, т.е. рабочее время...

Расчет общего времени задержки в блоке Service
Добрый вечер всем! В курсовом проекте требуется найти кпд рабочих. Для решения этой задачи мне...

5
680 / 487 / 124
Регистрация: 07.05.2013
Сообщений: 1,775
Записей в блоге: 6
01.12.2018, 10:40 2
n = 7 -- заданное количество заготовок

t = 1 -- время производства
cnt = 0 -- количество заготовок для времени t

while cnt < n do
n1 = math.floor( t/3 )
n2 = math.floor( t/5 )
n3 = math.floor( t/7 )
cnt = n1 + n2 + n3
t = t + 1
end

print( n1, n2, n3 )
0
193 / 173 / 30
Регистрация: 10.07.2012
Сообщений: 800
02.12.2018, 16:16 3
пусть С0, С1, С2 - времена окончания работ машин в оптимальном расписании, С = max{C0, C1, C2}. мы хотим найти минимальное С, при котором машины суммарно смогут произвести t деталей. это можно сделать бинарным поиском по С.
0
680 / 487 / 124
Регистрация: 07.05.2013
Сообщений: 1,775
Записей в блоге: 6
02.12.2018, 21:52 4
salam, в данном случае дольше писать оптимальную программу, чем решить задачу "в лоб", как я предложил. Тем более, что в постановке задачи никакая оптимизация не требуется.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
03.12.2018, 00:41 5
Javascript
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
var times = [3, 5, 7];
 
// Найдем время, которое будет равным для всех станков
var tPerfect = times[0] * times[1] * times[2]; // 105
 
// Посчитаем количество деталей, которое будет изготовлено за это время
var cntPerfect = times[0] * times[1] + times[0] * times[2] + times[1] * times[2]; // 71
 
function count(detailsCnt) {
    // Посчитаем среднее время на изготовление входящего кол-ва
    var average = tPerfect * detailsCnt / cntPerfect;
    var counts =
        times
            // Рассчитаем для каждой детали кол-во, при котором время будет равным
            // или большим среднему
            .map(t => ({
                time: t,
                count: Math.ceil(average / t)
            }))
            // Отсортируем по убыванию затраченного времени
            .sort((a, b) => b.time * b.count - a.time * a.count)
 
    // Разница в количестве рассчитанных выше среднего времени деталей
    // и требуемых
    var diff = counts.reduce((sum, t) => sum + t.count, 0) - detailsCnt;
    
    // Уменьшаем разницу за счет требующих большего времени деталей
    while(diff > 0) counts[diff-=1].count--
 
    // Сортируем по времени и возвращаем результат
    return counts.sort((a, b) => a.time - b.time).map(t => t.count)
}
0
Модератор
2830 / 1994 / 431
Регистрация: 26.03.2015
Сообщений: 7,658
03.12.2018, 17:24 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Main()
{
    Console.WriteLine($"{Solve(7)}");
}
 
(int, int, int) Solve(int amount, int t1 = 3, int t2 = 5, int t3 = 7)
{
    int n = t1 * t2 + t2 * t3 + t1 * t3;
    var (x1, x2, x3) = (amount * t2 * t3 / n, amount * t1 * t3 / n, amount * t1 * t2 / n);
    while (x1 + x2 + x3 < amount)
        new(int, Action)[] { (x1 * t1 + t1, () => x1++), (x2 * t2 + t2, () => x2++), (x3 * t3 + t3, () => x3++) }
        .MinBy(x => x.Item1).Item2();
    return (x1, x2, x3);
}
(возможны опечатки)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2018, 17:24

Расчет общего времени, мин и максимального проведенного в курилке
Приветствую, подскажите решение для следующей задачи. Имеем следующие данные 1. Список фамилий...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.