Решение задачи о коммивояжере, прямой алгоритм
Поиск верхних и нижних границ для оптимального значения на подобласти допустимых решений. Методы и проблемы решения задач нелинейного программирования. Написание и отладка программы. Создание программы для решения задачи "коммивояжёра" прямым алгоритмом.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.01.2016 |
Размер файла | 176,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
По предмету Математические методы
Тема Решение задачи о коммивояжере, прямой алгоритм
Введение
В настоящее время существуют такие типы задач как задачи математического программирования. Существуют множество видов таких задач и способов их решения. В данном случае мы будем рассматривать вид задач математического программирования под названием задачи «Коммивояжёра». Цель задачи - отыскать наилучший маршрут для торговца, который должен объехать города и вернуться в исходный город, как правило за кратчайшее время или с наименьшими затратами. Такие задачи актуальны во многих областях таких как: автомобильные, судовые, железно - дорожные перевозки или в конвейерном производстве. В условиях задачи указывается критерий маршрута и соответствующие матрицы расстояний или стоимостей и т.д. В задачах указывается, что маршрут должен быть одинарным. В современной интерпретации задачи торговца формулируется так: в произвольном порядке обойти все вершины графа по кратчайшему пути и вернуться в исходную вершину, причем каждая вершина проходится 1 раз. Обычно задачу о торговце решают с помощью прямого алгоритма, т.к. для человека расчет такой задачи занимает много времени, и создаются программы для облегчения вычислений.
В данном курсовом проекте будет рассмотрен вопрос о создании программы для решения задачи «коммивояжёра» прямым алгоритмом.
1. Общая часть
1.1 Постановка задачи
1.1.1 Экономическая постановка задачи
В условиях данной задачи сказано, что коммивояжер должен обойти 7 городов, чтобы найти оптимальный маршрут, расстояние которого будет самым коротким.
Расстояния между городами указаны в таблице 1.
Таблица 1.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
||
1 |
5 |
11 |
6 |
3 |
15 |
8 |
||
2 |
5 |
7 |
12 |
6 |
7 |
2 |
||
3 |
11 |
7 |
3 |
6 |
3 |
7 |
||
4 |
6 |
12 |
3 |
2 |
4 |
13 |
||
5 |
3 |
6 |
6 |
2 |
2 |
5 |
||
6 |
15 |
7 |
3 |
4 |
1 |
4 |
||
7 |
8 |
2 |
7 |
13 |
5 |
4 |
1.1.2 Математическая постановка задачи
N - число городов.
Ci j , i, j=1..N - матрица затрат, где Ci j - затраты на переход из i-го города в j-й.
Xi j - матрица переходов с компонентами:
Критерий:
Ограничения:
Ui - Uj + N Ч Xi j Ј N-1, i, j = 1..N, i № j. (4)
Условие (2) означает, что коммивояжер из каждого города выезжает только 1 раз;
Условие (3) о том , что в каждый город въезжает только 1 раз;
Условие (4) обеспечивает замкнутость маршрута, содержащего N городов, и не содержащего замкнутых внутренних петель.
1.2 Обзор существующих решений
Задачи «коммивояжера» решаются несколькими способами:
1.Прямым алгоритмом
Имеется N городов, которые должен обойти коммивояжер с минимальными затратами. При этом на его маршрут накладывается два ограничения:
- маршрут должен быть замкнутым, то есть коммивояжер должен вернуться в тот город, из которого он начал движение;
- в каждом из городов коммивояжер должен побывать точно один раз, то есть надо обязательно обойти все города, при этом не побывав ни в одном городе дважды.
Для расчета затрат существует матрица условий, содержащая затраты на переход из каждого города в каждый, при этом считается, что можно перейти из любого города в любой, кроме того же самого. Целью решения является нахождения маршрута, удовлетворяющего всем условиям и при этом имеющего минимальную сумму затрат.
2. Метод ветвей и границ
Общая идея метода может быть описана на примере поиска минимума и максимума функции f(x) на множестве допустимых значений x. Функция f и x могут быть произвольной природы. Для метода ветвей и границ необходимы две процедуры: ветвление и нахождение оценок (границ).
Процедура ветвления состоит в разбиении области допустимых решений на подобласти меньших размеров. Процедуру можно рекурсивно применять к подобластям. Полученные подобласти образуют дерево, называемое деревом поиска или деревом ветвей и границ. Узлами этого дерева являются построенные подобласти.
Процедура нахождения оценок заключается в поиске верхних и нижних границ для оптимального значения на подобласти допустимых решений.
В основе метода ветвей и границ лежит следующая идея если нижняя граница для подобласти A дерева поиска больше, чем верхняя граница какой-либо ранее просмотренной подобласти B, то A может быть исключена из дальнейшего рассмотрения.
Обычно, минимальную из полученных верхних оценок записывают в глобальную переменную m; любой узел дерева поиска, нижняя граница которого больше значения m, может быть исключен из дальнейшего рассмотрения.
Если нижняя граница для узла дерева совпадает с верхней границей, то это значение является минимумом функции и достигается на соответствующей подобласти.
2. Технологическая часть
2.1 Нелинейное программирование. Общий вид задач нелинейного программирования Модели нелинейного программирования. Методы решения задач нелинейного программирования
Нелинейное программирование -- случай математического программирования, в котором целевой функцией или ограничением является нелинейная функция.
Задача нелинейного программирования ставится как задача нахождения оптимума определенной целевой функции при выполнении условий
где -- параметры,
s -- ограничения, n -- количество параметров, s -- количество ограничений.
В отличие от задачи линейного программирования, в задаче программирования нелинейного оптимум не обязательно лежит на границе области, определенной ограничениями.
Как правило, в практических задачах необходимо определить наибольшее и наименьшее значения функции (глобальный экстремум) в некоторой области. Говорят, что функция z = f (X) имеет в точке X0 заданной области D глобальный максимум (наибольшее значение) или глобальный минимум (наименьшее значение), если неравенство f(X) ? f(X0) или соответственно выполняется для любой точки X € D.
Если область D замкнута и ограничена, то дифференцируемая функция z = f (X) достигает в этой области своих наибольшего и наименьшего значений или в стационарной точке, или в граничной точке области (теорема Вейерштрасса).
Граница области D аналитически может быть задана системой уравнений (условий) относительно переменных x1, x2, ..., xn. Поэтому, исследуя экстремальные свойства функции на границе, необходимо решить задачу определения условного экстремума.
Условный экстремум. Пусть необходимо найти экстремум функции z = f (x1, x2, ..., xn ) при условии, что переменные x1, x2, ..., xn удовлетворяют, уравнениям
цi (x1, x2, ..., xn ) = 0, i = 1, 2, ..., m,m < n |
(1) |
Предполагается, что функции f и цi , имеют непрерывные частные производные по всем переменным. Уравнения (1) называют уравнениями связи. Говорят, что в точке удовлетворяющей уравнениям связи(1), функция z = f (X) имеет условный максимум (минимум), если неравенство f(X0) ? f(X) (f(X0) ? f(X)) имеет место для всех точек X, координаты которых удовлетворяют уравнениям связи.
Легко заметить, что задача определения условного экстремума совпадает с задачей нелинейного программирования.
Один из способов определения условного экстремума применяется в том случае, если из уравнений связи (1) m переменных, например x1, x2, ..., xn, можно явно выразить через оставшиеся n - m переменных:
xi = шi (xm + 1 , ..., xn ), i = 1, 2, ..., m, |
(2) |
Подставив полученные выражения для xf в функцию z, получи мzi = f(шi (xm + 1 , ..., xn ), ..., шm (xm + 1 , ..., xn ), xm + 1 , ..., xn ) или
z = F(xm + 1 , ..., xn ) |
(3) |
Задача сведена к нахождению локального (глобального) экстремума для функции (3) от n - m переменных. Если в точке функция (3) имеет экстремум, то в точке функция z = f (x1, ..., xn ) имеет условный экстремум.
3. Специальная часть
3.1 Описание метода решения
Для того, чтобы начать решать задачу необходимы условия задачи, в данном случае они представлены в виде таблицы. В таблице даны расстояния между городов.
В условии сказано, что коммивояжер начинает свой маршрут из города 1.
1)По таблице находим город 1 и по строке начинаем искать тот город, который будет давать наименьшее приращение к длине пути или город, ближайший к городу 1.
2) Так как путь только начался то расстояние, пройденное коммивояжером, будет равно нулю, значит к нему прибавляем найденное расстояние.
3) После этого записываем получившуюся сумму, и продолжаем искать город , подходящий к маршруту, после того как следующий город найден, расстояния снова складываются.
4) После того как все города использованы в маршруте, наша задача вернуться в город 1, откуда начинался маршрут, по строке последнего города смотрим расстояние до города 1 и прибавляем его к получившейся сумме расстояний между городов.
5) В результате этих действий находят оптимальный маршрут, с самым коротким расстоянием между городов.
3.2 Решение задачи теста для написания и отладки программы
В данной таблице приведены все условия для решения задачи, а именно длинны путей между городами. Q - расстояние, L - шаг
1 |
2 |
3 |
4 |
5 |
6 |
7 |
||
1 |
5 |
11 |
6 |
3 |
15 |
8 |
||
2 |
5 |
7 |
12 |
6 |
7 |
2 |
||
3 |
11 |
7 |
3 |
6 |
3 |
7 |
||
4 |
6 |
12 |
3 |
2 |
4 |
13 |
||
5 |
3 |
6 |
6 |
2 |
2 |
5 |
||
6 |
15 |
7 |
3 |
4 |
1 |
4 |
||
7 |
8 |
2 |
7 |
13 |
5 |
4 |
Q =
L = 1
=
L = 1->5
Q = Q
L = 1->5->4
Q = Q + Q + = 5 + 3 = 8
L = 1->5->4->3
Q = Q +
L = 1->5->4->3->6
Q = Q +
L = 1->5->4->3->6->7
Q = Q +
L = 1->5->4->3->6->7->2
Q = Q +
L = 1->5->4->3->6->7->2->1
3.3 Анализ полученных результатов
В результате решения задачи самым оптимальным маршрутом между данными городами был выявлен маршрут, состоящий из семи шагов, а именно:
1->5->4->3->6->7->2->1.
Длинна пройденного пути для этого маршрута оказалась самой наименьшей:
Q = 22
3.4 Разработка алгоритма
После того как пользователь запустил исполняемый файл, на рабочем столе появится пустое окно (рис В1), в котором пользователь должен ввести цифру количества столбцов и строк таблицы. Число строк соответствует числу городов. Так как созданная таблица будет квадратная , то пользователю достаточно ввести одну цифру. Данная форма создаст число переменных в соответствии с количеством ячеек таблицы.
Далее открывается окно с созданной таблицей (рис. В2), в которую следует ввести цифры из таблицы, данной в качестве условия пользователю. Цифры соответствуют расстояниям между городами. В данном окне так же возможен выбор города, с которого коммивояжер начнет маршрут. Программа будет проверять минимальный элемент по строке, и суммировать его с количеством уже пройденного пути.
После того, как все поля таблицы заполнены, следует нажать кнопку «Продолжить» будет произведен подсчет согласно формулам подсчета задач коммивояжера.
В третьем окне появится результат подсчетов программы, а именно оптимальный маршрут между данными городами и расстояние, потраченное на прохождение этого маршрута.(рис.В3) ответ будет выведен с помощью цифры с количеством пройденного пути и маршрута в виде цифр и стрелок
После выполнения всех этих действий пользователь может закрыть окно с программой, после чего она завершает работу.
3.5 Обоснование выбора средств разработки
На сегодняшний день существует достаточно языков и сред программирования, при помощи которых можно создавать приложения. Наиболее известные: Delphi, Pascal, C# и т.д.
C#, являясь последним из широко распространенных языков программирования, должен впитать в себя весь имеющийся опыт и вобрать лучшие стороны существующих языков программирования, при этом являясь специально созданным для работы в .NET. Сама архитектура .NET продиктовала ему (как и многим другим языкам, на которых можно писать под .NET) объектно-ориентированную направленность. Конечно, это не является правилом, возможно создание компиляторов даже функциональных языков по .NET, на эту тему существуют специальные работы.
Свой синтаксис C# во многом унаследовал от C++ и Java. Разработчики, имеющие опыт написания приложений на этих языках, найдут в C# много знакомых черт. Но вместе с тем он является во многом новаторским - аттрибуты, делегаты и события, прекрасно вписанные в общую идеологию языка, прочно заняли место в сердцах .NET - разработчиков. Их введение позволило применять принципиально новые приемы программирования.
Конечно, излюбленным объектом для сравнения с C# у мировой коммьюнити является Java. Также разработанный для работы в виртуальной среде выполнения, имеющей объектно-ориентированную архитектуру и сборщик мусора, осноыванный на механизме ссылок. При сравнении с этим языком сразу выделаются такие особенности, как возможность объявлять несколько классов в одном файле, из чего следует синтаксическая поддержка иерархической системы пространств имен. Из реализации ООП-концепций сходство в механизме наследования и реализации (и в Java и в C# возможно единичное наследование, но множественная реализация интерфейсов,
в отличие от C++). Но в Java отсутствуют свойства и индексаторы (а также делегаты и события, но они отсутствуют еще много где). Также есть возможность перечисления контейнеров.
Из вещей, включенных в спецификацию языка, но не являющихся чисто "программистскими" необходимо отметить возможность использование комментариев в формате XML. Если комментарии отвечают специально описанной структуре, компилятор по ним может сгенерировать единый XML-файл документации.
Но C# внес и свои уникальные черты, которые уже были упомянуты - это события, индексаторы, атрибуты и делагаты. Все эти элементы будут обсуждены в следующих частях, сейчас лишь отмечу, что они предоставляют собой очень полезные возможности, которые не останутся невостребованными.
В результате проведенного анализа наиболее популярных средств программирования можно прийти к выводу, что для реализации поставленных задач наиболее всего подходит язык программирования C#.
3.6 Описание программных модулей
Программа состоит из трех частей - форм.
Первая форма отвечает за задание параметров для создаваемой таблицы. Невозможно продолжить работу с программой, пока первая форма не будет заполнена.
Вторая форма полностью зависима от первой и в зависимости от того, какие параметры заданы в первой форме будет создана таблица во второй форме.
Третья форма выводит ответ из результатов работы программы над условиями, заданными во второй форме.
3.7 Тестирование программы
В результате тестирования программы ни одной ошибки, мешающей работе программы, обнаружено не было. Программа работает при любых заданных условиях. В результате решения задачи данной для тестирования программы, было найдено решение этой задачи, ответ которой полностью совпал с ответом, найденным разработчиком самостоятельно. Программа полностью готова к работе, независимо от того, будет ли пользователь следовать инструкции по использованию программы или нет.
У данной программы есть только один недостаток - если при решении задачи могут иметься несколько вариантов решений, то программа будет рассматривать только одно, так что пользователю будет выведена информация только об одном решении.
3.8 Инструкция пользователю
После того как пользователь запустил исполняемый файл, на рабочем столе появится пустое окно (рис В1), в котором пользователь должен ввести цифру количества столбцов и строк таблицы. Число строк соответствует числу городов. Так как созданная таблица будет квадратная , то пользователю достаточно ввести одну цифру.
Далее открывается окно с созданной таблицей (рис. В2), в которую следует ввести цифры из таблицы, данной в качестве условия пользователю. Цифры соответствуют расстояниям между городами. В данном окне так же возможен выбор города, с которого коммивояжер начнет маршрут.
После того, как все поля таблицы заполнены, следует нажать кнопку «Продолжить»
В третьем окне появится результат подсчетов программы, а именно оптимальный маршрут между данными городами и расстояние, потраченное на прохождение этого маршрута.(рис.В3)
Заключение
коммивояжёр программирование нелинейный
В данном курсовом проекте был рассмотрен вопрос о создании программы для решения задачи «коммивояжёра» прямым алгоритмом.
Суть прямого алгоритма в следующем: Имеется N городов, которые должен обойти коммивояжер с минимальными затратами. При этом на его маршрут накладывается два ограничения:
- маршрут должен быть замкнутым, то есть коммивояжер должен вернуться в тот город, из которого он начал движение;
- в каждом из городов коммивояжер должен побывать точно один раз, то есть надо обязательно обойти все города, при этом не побывав ни в одном городе дважды.
Для расчета затрат существует матрица условий, содержащая затраты на переход из каждого города в каждый, при этом считается, что можно перейти из любого города в любой, кроме того же самого. Целью решения является нахождения маршрута, удовлетворяющего всем условиям и при этом имеющего минимальную сумму затрат.
Для того, чтобы начать решать задачу необходимы условия задачи, в данном случае они представлены в виде таблицы 1. В таблице даны расстояния между городов.
В результате решения задачи самым оптимальным маршрутом между данными городами был выявлен маршрут, состоящий из семи шагов, а именно:
1->5->4->3->6->7->2->1.
Длинна пройденного пути для этого маршрута оказалась самой наименьшей:
Q = 22
Ответ совпал с ответом задачи, решенной программистом, значит программа написана верно.
Далее была создана инструкция для пользователей, где программа была полностью расписана.
После того как пользователь запустил исполняемый файл, на рабочем столе появится пустое окно (рис В1), в котором пользователь должен ввести цифру количества столбцов и строк таблицы. Число строк соответствует числу городов. Так как созданная таблица будет квадратная , то пользователю достаточно ввести одну цифру.
Далее открывается окно с созданной таблицей (рис. В2), в которую следует ввести цифры из таблицы, данной в качестве условия пользователю. Цифры соответствуют расстояниям между городами. В данном окне так же возможен выбор города, с которого коммивояжер начнет маршрут.
После того, как все поля таблицы заполнены, следует нажать кнопку «Продолжить»
В третьем окне появится результат подсчетов программы, а именно оптимальный маршрут между данными городами и расстояние, потраченное на прохождение этого маршрута.(рис.В3)
Подведем итог, после всех перечисленных шагов, получилась программа, позволяющая высчитать ответ, согласно решению задач «коммивояжера» все пункты были детально рассмотрены и выполнены, благодаря этому цель курсового проекта была достигнута.
Литература
1. Агальцов В.П., Валдайская И.В. Математические методы в программировании: Учебник. - М.: ИД «ФОРУМ»: ИНФРА-М, 2006. - 224 с.: ил. - (Профессиональное образование).
2. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: Учебное пособие. - М.: Форум: Инфра-М, 2014
3. Орлов В.В. Технологии разработки программных продуктов. - СПб.: Питер, 2003. - 437 с.
4. Партыка т.Л., Попов И.И. Математические методы: Учебник. - М.: ФОРУМ: ИНФРА-М, 2010. - 464с.: ил. - ( Профессиональное образование)
Приложение А. Глоссарий понятий
Задачи коммивояжера.
Прямой алгоритм.
Метод ветвей и границ.
Маршрут.
Форма.
Шаги.
Модуль программы.
Нелинейное программирование.
Таблица.
Функции.
Экономическая постановка задачи.
Математическая постановка задачи.
Блок - схема.
Приложение Б. Текст программы
Форма 1.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ex_20
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int x;
int[,] matrix;
int[,] new_matrix;
int start;
int[] second;
int q;
string _q;
string _l;
bool[] vis;
int count;
int j_min;
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
if (!f2.error)
{
x = f2.getResult();
f2.Dispose();
Form3 f3 = new Form3(x);
f3.ShowDialog();
if (!f3.error)
{
Class1 gr = f3.getResultate();
f3.Dispose();
x = gr.x;
matrix = gr.matrix;
start = gr.start;
string starting = (start + 1).ToString();
vis = new bool[x];
second = new int[x * x];
new_matrix = new int[x, x];
count = 0;
for (int j = 0; j < x * x; j++)
{
for (int i = 0; i < x; i++)
if (i != start && !vis[i])
{
second[count] = matrix[start, i];
j_min = i;
}
if (second[count] != 0)
{
for (int i = 0; i < x; i++)
if (i != start && matrix[start, i] < second[count] && !vis[i])
{
second[count] = matrix[start, i];
j_min = i;
}
if (count == 0)
{
_q = second[count].ToString();
_l = (start + 1).ToString();
}
else
{
_q += string.Format(" + {0}", second[count]);
_l += string.Format(" -> {0}", start + 1);
}
q += second[count];
new_matrix[start, j_min] = second[count];
vis[start] = true;
start = j_min;
vis[j_min] = true;
count++;
}
else
break;
}
_l += string.Format(" -> {0} -> {1}", start + 1, starting);
_q += string.Format(" + {0}", matrix[start, Convert.ToInt16(starting) - 1]);
q += matrix[start, Convert.ToInt16(starting) - 1];
new_matrix[start, Convert.ToInt16(starting) - 1] = matrix[start, Convert.ToInt16(starting) - 1];
label1.Text = string.Format("Q = {0} = {1} L = {2}", _q, q, _l);
int loc_x = 12;
int loc_y = 53;
int l_y = 0;
int l_x = 0;
Label[,] lbl = new Label[x,x];
for (int i = 0; i < x; i++)
{
l_y = loc_y * (i + 1);
Label lb = new Label();
lb.Size = new Size(50, 15);
lb.AutoSize = false;
lb.Text = string.Format("Город {0}", i + 1);
lb.Location = new Point(14, l_y);
this.Controls.Add(lb);
for (int j = 0; j < x; j++)
{
l_x = (loc_x + 50) * (j + 1);
if (j == 0)
{
int lo_x = (loc_x + 50) * (i + 1);
Label lab = new Label();
lab.Size = new Size(50, 15);
lab.AutoSize = false;
lab.Text = string.Format("Город {0}", i + 1);
lab.Location = new Point(lo_x, 30);
this.Controls.Add(lab);
}
if (i != j && new_matrix[i, j] != 0)
{
lbl[i, j] = new Label();
lbl[i, j].Text = new_matrix[i, j].ToString();
lbl[i, j].Size = new Size(40, 20);
lbl[i, j].Location = new Point(l_x + 15, l_y);
this.Controls.Add(lbl[i, j]);
}
}
}
return;
}
}
this.Close();
}
}
}
Форма 2.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ex_20
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
button1.Enabled = false;
}
int x = 0;
public bool error = true;
private void button1_Click(object sender, EventArgs e)
{
error = false;
try { x = Convert.ToInt16(textBox1.Text); }
catch
{
MessageBox.Show("Значение введено не верно !");
error = true;
return;
}
if (x < 3)
{
MessageBox.Show("Значение введено не верно !");
error = true;
return;
}
this.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length != 0)
button1.Enabled = true;
else
button1.Enabled = false;
}
public int getResult() { return x; }
}
}
Форма 3.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ex_20
{
public partial class Form3 : Form
{
int x = 0;
TextBox[,] tb;
int[,] matrix;
public Form3(int x)
{
InitializeComponent();
this.x = x;
tb = new TextBox[x, x];
int loc_x = 12;
int loc_y = 53;
int l_y = 0;
int l_x = 0;
for (int i = 0; i < x; i++)
{
l_y = loc_y * (i + 1);
Label lb = new Label();
lb.Size = new Size(50, 15);
lb.AutoSize = false;
lb.Text = string.Format("Город {0}", i + 1);
comboBox1.Items.Add(i + 1);
lb.Location = new Point(14, l_y + 4);
this.Controls.Add(lb);
for (int j = 0; j < x; j++)
{
l_x = (loc_x + 50) * (j + 1);
if (j == 0)
{
int lo_x = (loc_x + 50) * (i + 1);
Label lab = new Label();
lab.Size = new Size(50, 15);
lab.AutoSize = false;
lab.Text = string.Format("Город {0}", i + 1);
lab.Location = new Point(lo_x, 37);
this.Controls.Add(lab);
}
tb[i, j] = new TextBox();
if (i == j)
{
tb[i, j].Text = "?";
tb[i, j].TextAlign = HorizontalAlignment.Center;
tb[i, j].Enabled = false;
tb[i, j].Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
}
tb[i, j].Size = new Size(40, 20);
tb[i, j].Location = new Point(l_x, l_y);
this.Controls.Add(tb[i, j]);
}
}
comboBox1.SelectedIndex = 0;
}
public bool error = true;
private void button1_Click(object sender, EventArgs e)
{
error = false;
matrix = new int[x, x];
for(int i = 0; i < x; i++)
for (int j = 0; j < x; j++)
{
if(i != j)
try { matrix[i, j] = Convert.ToInt16(tb[i, j].Text); }
catch { error = true; }
}
if (error)
{
MessageBox.Show("Значения введены не верно !");
return;
}
this.Close();
}
public Class1 getResultate() { Class1 gr = new Class1(x, matrix, comboBox1.SelectedIndex); return gr; }
}
}
Приложение В. Видовые экраны работы программы
Рис. В1 Форма 1
Рис. В2 Форма 2
Рис. В3 Форма 3
Размещено на Allbest.ru
Подобные документы
Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.
курсовая работа [586,3 K], добавлен 04.04.2015Постановка задачи о коммивояжере. Нахождение оптимального решения с применением метода ветвей и границ. Основной принцип этого метода, порядок его применения. Использование метода верхних оценок в процедуре построения дерева возможных вариантов.
курсовая работа [167,8 K], добавлен 01.10.2009Содержательная и формальная (математическая) постановка задачи. Разработка алгоритма решения задачи. Структуры программы и алгоритмы программных модулей, их описание. Решение задачи на конкретном примере. Разработка системы тестов и отладка программы.
курсовая работа [882,1 K], добавлен 24.11.2014Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.
курсовая работа [132,0 K], добавлен 09.12.2008Классы задач P и NP, их сводимость. Примеры NP-полных и NP-трудных задач. Сущность метода поиска с возвратом. Алгоритмы решения классических задач комбинаторного поиска. Решение задачи о восьми ферзях. Поиск оптимального решения методом ветвей и границ.
презентация [441,5 K], добавлен 19.10.2014Решение задачи нелинейного программирования с определением экстремумов функции. Этапы процесса нахождения решения задачи нелинейного программирования с использованием ее геометрической интерпретации. Определение гиперповерхности уровней функции.
курсовая работа [1,5 M], добавлен 25.09.2010Изучение экстремальных задач и поиск их решений. Выбор метода решения и приведения задачи к каноническому виду и к задаче линейного программирования. Метод искусственного базиса. Модифицированный симплекс-метод. Написание программы на языке С++Builder 6.
курсовая работа [343,0 K], добавлен 28.11.2010Особенности решения задач нелинейного программирования различными методами для проведения анализа поведения этих методов на выбранных математических моделях нелинейного программирования. Общая характеристика классических и числовых методов решения.
дипломная работа [2,4 M], добавлен 20.01.2013Понятие графика функции и его представление на ЭВМ. Алгоритм реализации, блок-схема и функциональные тесты графического метода решения частного случая задачи нелинейного программирования, его математическая модель. Диалог программы с пользователем.
курсовая работа [1,6 M], добавлен 15.05.2012Анализ метода линейного программирования для решения оптимизационных управленческих задач. Графический метод решения задачи линейного программирования. Проверка оптимального решения в среде MS Excel с использованием программной надстройки "Поиск решения".
курсовая работа [2,2 M], добавлен 29.05.2015