Теория расписаний

Составление оптимального расписания, где критерием оптимальности служит минимальное значение функции штрафа. Описание алгоритма и разработка программы на языке программирования высокого уровня Java в среде BlueJ. Проверка решения и построение графика.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.12.2012
Размер файла 67,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки, молодежи и спорта Украины

Севастопольский национальный технический университет

Кафедра кибернетики и вычислительной техники

Пояснительная записка к курсовой работе

по дисциплин: «Вычислительный практикум»

Севастополь

2012

Содержание

Введение

1. Постановка задачи

2. Описание алгоритма

3. Описание программы

4. Тестовые примеры

5. Анализ результатов эксперимента

Заключение

Литература

Приложение A

Введение

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

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

При решении данной задачи в рассматриваемой системе необходимо закрепить решаемые задачи за ЭВМ и установить порядок их выполнения во времени.

В данной курсовой работе рассматривается одна из задач теории расписаний -- составление оптимального расписания, где критерием оптимальности служит минимальное значение функции штрафа. Данная задача является классической задачей упорядочения -- наиболее изученного класса задач теории расписаний. В этих задачах распределений задач по ЭВМ и длительности их выполнения предполагаются заданными. Необходимо указать наиболее эффективную стратегию управления очередями задач на выполнение каждой ЭВМ.

Таким образом, решение задачи может быть получено в результате рассмотрения конечного числа расписаний, определяемых возможными последовательностями обслуживания требований. Такие расписания называются перестановочными. Если множество N не упорядочено, то число перестановочных расписаний n!.

1. Постановка задачи

алгоритм программ расписание

Пусть n требований обслуживается одной ЭВМ. Все требования поступают на обслуживание в момент времени d=0. Длительность обслуживания требования k равна tk единиц времени. Если требование k обслуживается первым, то для подготовки прибора к обслуживанию этого требования необходимо 0k единиц времени, . Если требование j обслуживается непосредственно после требования i, то для перегрузки программного обеспечения ЭВМ необходимо ij единиц времени, 1ijn. Обслуживание требования k желательно завершить к директивному сроку Dk>=0. Функция штрафа k(x)=сk*max(x-Dk,0). Требуется организовать так процесс обслуживания требований, чтобы функция штрафа

была минимальной. -фактическое время завершения обслуживания требования k.

2. Описание алгоритма

1. Инициализация данных

2. Выбор начальной расстановки

3. Определение функции штрафа

4. Запомнить текущую расстановку как оптимальную

5. Пока существуют нерассмотренные варианты

a. Генерировать следующую расстановку

b. Вычислить функцию штрафа

c. Если текущая расстановка лучше, запомнить расстановку как оптимальную

6. Вывод данных

Алгоритм работы программы:

Переменные:

c : вектор;

i,j : целое;

Начало:

i:=n-1;

Пока (c[i]>=c[i+1]) i:=i-1;

j:=n;

Пока (c[j]<=c[i]) j:=j-1;

c:переставить(i,j);

i:=i+1; j:=n;

Пока (i<j)

н.ц.

c:переставить(i,j);

i:=i+1;

j:=j-1;

к.ц.

Конец.

3. Описание программы

Переменные и массивы, используемые в программе:

int n - количество требований;

int [ ] tk - длительность обслуживания требований;

int [ ] dk - директивный срок;

int [ ] c - приоритет выполнения;

int [ ] sigma - подготовка прибора к обслуживанию;

int [ ] tek - текущее расписание;

int [ ] order - порядок обработки заданий;

int [ ] best - оптимальное расписание;

int f - значение функции штрафа;

int perest[ ] - массив перестановок;

Классы и методы используемы в программе:

Класс Perebor выполняет генерацию перестановок с помощью алгоритма полного перебора

· Метод getPerms возвращает полученные перестановки

· Метод permut генерирует перестановки

· Метод vector меняет местами требования согласно алгоритму

· Метод inv - реверс полученного вектора перестановок

· Метод factorial вычисляет факториал n

Класс Main содержит главный метод, который управляет работой всей программы

· Метод f вычисляет для каждой перестановки функцию штрафа

· Метод main является главным методом программы, который выполняет управление над программой

4. Тестовые примеры

Пример 1:

Введите n:

Dva

Неверный ввод!

Пример 2:

Введите n:

0

Неверный ввод!!!

Пример 3:

Введите n:

-6

Значения не могут быть отрицательными!

Пример 4:

Введите n: 3

Ввод длительности обслуживания требования tk(3): 3 4 5

Ввод директивных сроков dk(3): 4 5 6

Ввод времени на подготовку каждого требования и время на перезагрузку ЭВМ sigma(3*3):

3 4 5 4 5 6 1 3 4

Ввод приоритетов c(3): 4 5 6

Решение с помощью алгоритма полного перебора:

Перестановка: Функция

штрафа

[0, 1, 2]: 83

[1, 0, 2]: 122

[0, 2, 1]: 71

[2, 0, 1]: 100

[1, 2, 0]: 102

[2, 1, 0]: 116

Минимальная функция штрафа: 71, при порядке: [0, 2, 1].

Время выполнения: 60 мc.

Пример 5:

Введите n: 3

Ввод длительности обслуживания требования tk(3): 0 0 0

Ввод директивных сроков dk(3): 0 0 0

Ввод времени на подготовку каждого требования и время на перезагрузку ЭВМ sigma(3*3):

0 0 0 0 0 0 0 0 0

Ввод приоритетов c(3): 0 0 0

Решение с помощью алгоритма полного перебора:

Перестановка: Функция

штрафа

[0, 1, 2]: 0

[1, 0, 2]: 0

[0, 2, 1]: 0

[2, 0, 1]: 0

[1, 2, 0]: 0

[2, 1, 0]: 0

Минимальная функция штрафа: 0.

Время выполнения: 7 мc.

5. Анализ результатов эксперимента

Проверка решения вручную:

Не целесообразно проверять 16 перестановок. Проверим значение функции штрафа для перестановки 0, 1, 2, 3, . Также возьмем наугад любую перестановку и посчитаем её функцию штрафа вручную. Если, результат решения вручную будет соответствовать результату решения программы, то работу программы будем считать верной.

Разместим исходное время и коэффициенты в порядке выполнения программ [0,1,2,3].

tk: 9, 2, 5, 7

Ck:2, 3, 4, 1

Вычислим значения фактического времени прохождения программ.

kt: 11, 16, 26, 38

Вычитаем из фактического времени t значение D: 10, 10, 10, 10, 10

Вычисляем сумму произведений коэффициентов Ck и времен tk:

F = 2*1+6*3+16*4+1*38 = 112

Для перестановки [2,1,0,3]

t: 5, 2, 9, 7

С:4, 3, 2, 1

Вычислим значения фактического времени прохождения программ.

t: 6, 11, 21, 38

Вычитаем из фактического времени t значение Dk: 10, 10, 10, 10, 10

Вычисляем сумму произведений коэффициентов Ck и времен t :

F = 2*1+6*3+16*4+1*38 = 112

Также проверим правильность расчета для последней перестановки

«[4, 3, 2, 1, 0]: 29,60».

Разместим исходное время и коэффициенты в порядке выполнения программ.

tk: 7, 7, 3, 7, 12

С: 4, 8, 8, 2, 7

Вычислим значения фактического времени прохождения программ.

t: 7, 7, 3, 7, 12

Вычитаем из исходного времени t значение Dk: 5, 5, 1, 5, 10

Вычисляем сумму произведений коэффициентов Ck и времен tk и делим ее на n=5:

Таким образом, программно полученный результат является верным.

По результатам расчета можно сделать вывод, что минимальное время выполнения заданного числа программ в срок равно 3 полученное для двух последовательностей - 1, 3, 2 и 3, 2, 1. Результат программы - максимальное кол-во программ, которое может быть выполнено за данные сроки 3, 1, 2.

Точные значения времени необходимые для определения оптимальной последовательности при заданном количестве требований приведены в таблице:

Число требований n

< 3

5

8

10

Время выполнения

2 мс

20 мс

40 мс

50 мс

Из графика и таблицы видно, что время выполнения программы прямо пропорционально зависит от числа требований. При увеличении числа требований затраченное время возрастает по нелинейной зависимости.

Заключение

Разработанная программа позволяет решить задачу планирования работы, когда требования необходимо реализовать на ЭВМ, в условиях поступления на выполнение задания из n требований.

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

Тестовые примеры показали, что программа работает правильно и обладает достаточным быстродействием. В целях предотвращения осложнения при тестовой проверке рекомендуется задавать небольшие значения n.

Программа была написана на языке программирования высокого уровня Java в среде BlueJ.

Литература

1. Скатков А. В. Методические указания по курсовому проектированию по дисциплине «Вычислительный практикум» для студентов заочной формы обучения специальности 6.05010201 [Текст]: учеб. пособие / Сергеев Г. Г., Луговская Л. П. - Севастополь: СевНТУ, 2012. - 23 с.

2. Ноутон П., Шилдт Г. Java 2: пер. с англ. - СПб.: БХВ-Петербург, 2000. - 1072 с.: ил.

3. Конвей Р.В., Максвелл В.А., Миллер Л.В. Теория расписаний: М.:
Наука, 1975. -300 с.

4. Танаев В.С., Шкурба В.В. Введение в теорию расписаний: М.: Наука,
1975. -256 с.

5. Сачков В.Н. Вероятностные методы в комбинаторном анализе: М.: Наука, 1978. - 288 с.

Приложение A

import java.util.*;

public class Perebor {

private int[][] perest;

private int[] p;

private int n;

private int k;

public Perebor(int[] s) {

n = s.length;

perest = new int[factorial(n)][n];

p = Arrays.copyOf(s, n);

k = 0;

permut(n-1);

}

public int[][] getPerms() {

return perest;

}

public void permut(int m) {

if(m == 0) {

perest[k++] = Arrays.copyOf(p, n);

} else {

for(int i = 0; i <= m; i++) {

permut(m-1);

if(i < m) {

vector(i, m);

inv(m-1);

}

}

}

}

public void vector(int a, int b) {

int t = p[a];

p[a] = p[b];

p[b] = t;

}

public void inv(int m) {

int i = 0;

int j = m;

while(i < j) {

vector(i, j);

i++;

j--;

}

}

public static int factorial(int n) {

int res = 1;

for(int i = 1; i <= n; i++) {

res *= i;

}

return res;

}

}

import java.util.*;

import java.io.*;

import java.util.Date;

public class Main {

public static void main(String [] args) {

try { //при работе с вводом данных, нужно позаботиться об исключениях

Scanner input = new Scanner(System.in);

int n;

System.out.println("Введите n: ");

n = input.nextInt();

if (n == 0) {

System.out.println("Неверный ввод. Перезапустите программу");

return;

}

int []tk = new int[n];

System.out.println("\n");

System.out.printf("Ввод длительности обслуживания требования tk(%d):\n",n);

for (int i = 0; i < tk.length; i++) {

tk[i] = input.nextInt();

}

int []dk = new int[n];

System.out.println("\n");

System.out.printf("Ввод директивных сроков dk(%d):\n",n);

for (int i = 0; i < dk.length; i++) {

dk[i] = input.nextInt();

}

int[][] sigma = new int[n+1][n];

System.out.println("\n");

System.out.printf("Ввод времени на подготовку каждого требования и время на перезагрузку ЭВМ sigma(%d*%s):\n",n,n);

for (int i = 0; i < sigma.length; i++) {

for(int j = 0; j < sigma.length-2; j++) {

sigma[i][j] = input.nextInt();

}

}

int [] c = new int[n];

System.out.printf("Ввод приоритетов c(%d):\n",n);

for (int i = 0; i < c.length; i++) {

c[i] = input.nextInt();

}

int[] order = new int[n]; //порядок обработки заданий

long startTime = System.currentTimeMillis(); //засекаем время

for(int i = 0; i < n; i++)

order[i] = i;

Perebor gen = new Perebor(order); //генерация перестановок

int[][] perest = gen.getPerms(); //заносим полученные перестановки в массив

int min = Integer.MAX_VALUE;

int[] best = new int[n];

System.out.println("\n\n\nРешение с помощью алгоритма полного перебора:");

System.out.printf("Перестановка: Функция\n");

System.out.printf(" штрафа\n");

for(int i = 0; i < perest.length; i++) {

int v = f(tk, sigma, dk, c, perest[i]);

System.out.printf("%s: %d\n", Arrays.toString(perest[i]), v);

if(v < min) {

min = v;

best = Arrays.copyOf(perest[i], n);

}

}

System.out.printf("\nМинимальная функция штрафа: %d, при порядке: %s.\n", min, Arrays.toString(best));

long timeSpent = System.currentTimeMillis() - startTime;

System.out.println("Время выполнения: " + timeSpent + " мc.");

}

catch

(InputMismatchException ioe) {

System.out.println("Неверный ввод!");

}

catch

(NegativeArraySizeException exc) {

System.out.println("Значения не могут быть отрицательными!");

}

}

public static int f(int[] tk, int[][] sigma, int[] dk, int[] c, int[] order) { //метод расчета функции штрафа

int k = tk.length;//длительность обслуживания требования

int now = 0; // текущее время

int f = 0; // функция штрафа

for(int i = 0; i < k; i++) {

if(i == 0)

now += sigma[k][order[i]];

else

now += sigma[order[i-1]][order[i]];

now += tk[order[i]];

f += c[order[i]] * Math.max(now - dk[order[i]], 0);//функция штрафа

}

return f;//метод возвращает функцию штрафа

}

}

Размещено на Allbest.ru


Подобные документы

  • Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.

    курсовая работа [381,7 K], добавлен 10.05.2018

  • Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.

    контрольная работа [204,4 K], добавлен 26.01.2013

  • Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.

    курсовая работа [1,4 M], добавлен 04.06.2013

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Разработка проектов на языке программирования высокого уровня. Составление алгоритма решения. Определение длительности переднего фронта входного, выходного сигнала. Работа с дисковыми файлами. Представление программы в виде иерархической структуры блоков.

    курсовая работа [163,2 K], добавлен 28.05.2015

  • Основные этапы определения радиуса и центра окружности, проходящей через три различные точки заданного множества точек. Особенности построения алгоритма на языке программирования. Составление тестовых примеров для демонстрации возможностей программы.

    контрольная работа [103,9 K], добавлен 21.08.2013

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

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

    курсовая работа [2,1 M], добавлен 21.04.2012

  • Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.

    курсовая работа [508,1 K], добавлен 10.11.2014

  • История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.

    курсовая работа [102,7 K], добавлен 23.12.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.