Дипломная работа: Информационная система двухкритериальной оптимизации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

5.7 Портфолио

Информация о студенте:

Ф.И.О: Тишаков Василий Андреевич;

Год рождения: 13 июля 1994;

Года обучения: 2012-2016.

В таблице 12 представлены наиболее значимые достижения. Копии основных грамот, дипломов и прочих документов представлены в приложении В.

Таблица 12 - Перечень достижений

Достижение

Область

Дата оценивания

1

Постоянное участие в СТЭМе "Фисташки"

Культура

21.01.2013

2

4 место в вузовском Фестивале СТЭМов "Микрофон ваш-2012г"

Культура

21.01.2013

3

Грамота "За лучший танец" в вузовском Фестивале СТЭМов "Микрофон ваш-2012г"

Культура

21.01.2013

4

Участвовал в конкурсе изобразительного творчества в рамках 5-го Межрегионального фестиваля-конкурса детского и юношеского творчества "Маэстро марш" посвященного 65-летию Победы в Великой Отечественной войне.

Культура

21.02.2013

5

Участвовал в соревнованиях по стритболу

Спорт

21.02.2013

6

Подготовка программы выступления "СтудВесна-2013"

Культура

18.03.2013

7

27 Студенческая научная конференция СГАСУ. Победитель на секции "Информационные системы и технологии" Диплом 3 степени.

Наука

31.03.2013

8

Блестящее выступление на "Студенческой Весне 2013" Грамота 4 место

Культура

22.04.2013

9

Участвовал в меж факультетскими соревнованиями по баскетболу.

Спорт

28.04.2013

10

Участвовал в забеге на 1 километр пробежал за 3 минуты: 18 секунд.

Спорт

20.05.2013

11

Был добровольцем помогал на "Областная легкоатлетическая эстафета (на призы Самарской Губернской Думы)"

Общественная деятельность

19.09.2013

12

Постоянные занятия в СТЭМе

Культура

21.11.2013

13

СТЭМ ФИСТ 1 место в смотре-конкурсе "Микрофон Ваш-2013г"

Культура

25.11.2013

14

Участвовал в меж факультетскими соревновании по боулингу. Прошли в финал.

Спорт

05.12.2013

15

Постоянное участие в СТЭМе ФИСТ

Культура

24.03.2014

ЗАКЛЮЧЕНИЕ

В ходе выпускной квалификационной работы была поставлена задача поиска оптимальной альтернативы. В ходе изучения была написана программа двухкритериальной оптимизации на основе метода предложенный профессором С.А. Пиявским «Простой и универсальный метод принятия решений в пространстве критериев «стоимость - эффективность».

Разработанная программа отвечает всем поставленным целям и задачам.

- авторизация и разграничение прав пользователей в системе;

- ведение справочника пользователей;

- решение задачи двухкритериальной оптимизации;

- ввод и редактирование исходных данных для решения задачи двухкритериальной оптимизации;

- сохранение результатов решения задач двухкритериальной оптимизации с последующим поиском по имени;

- формирование отчета по результатам двухкритериальной оптимизации в экранной и графической форме;

- демонстрация решения задачи двухкритериальной оптимизации на примере летательных аппаратов;

- просмотр и редактирование сохраненных и задач.

Результат исследования показывает сравнительную эффективность проектных решений по летательным аппаратам.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Пиявский, С.А. Простой и универсальный метод принятия решений в пространстве критериев «стоимость - эффективность» [Текст]. - Самара: Самарск. гос. арх.-строит. ун-т., 2014. - 21 с.

2. Ларичев, О.И. Вербальный анализ решений [Текст]. - Москва: 2006. - 181 с.

3. Множество Эджворта-Парето [Электронныйресурс] /URL: http://lektsii.net/3_51648.html/ (дата обращения: 20.05.2016)

4. Пиявский, С.А. Два новых понятия верхнего уровня в онтологии многокритериальной оптимизации [Текст]. - Самара: Самарск. гос. арх._строит. ун-т., 2013 - с. 65-85

5. Программа ПРИНН6 [Электронныйресурс] /URL: http://sciyouth.ru/ (дата обращения: 15.05.2016)

6. Программа принятия решений в многокритериальных ситуациях (mbi-ahp) [Электронныйресурс] http://simplecs.ru/files/Progr_ex2.pdf (дата обращения: 23.05.2016)

7. Дерябкин, В.П. Проектирование информационных систем по

8. методологии UML[Текст] /В.П.Дерябкин,, В.В/ Козлов - Самара:

9. Самарск. гос. арх.-строит. ун-т., 2008. - 42 с.

10. Леоненков, А.В. Самоучитель UML[Текст]/А.В. Леоненков// 2-е изд., пер. и доп. - СПб.: БХВ-Петербург, 2004. - 432 с.

11. Дерябкин, В.П. Проектирование автоматизированных систем обработки информации и управления: курс лекций [Текст]. - Самара: СГАУ, 2001. - 120 с.

ПРИЛОЖЕНИЕ А

Листинг основных программных модулей

#include "tasks.h"

#include <QSqlQuery>

#include <QVariant>

#include "Core/application.h"

#include <QList>

#include <QtAlgorithms>

#include <QPoint>

#include <Models/criterionfunctions.h>

#include <QStringList>

Tasks::Tasks()

{

this->_id = 0;

}

void Tasks::setId(int value)

{

this->_id = value;

}

void Tasks::setUserId(int value)

{

this->_user_id = value;

}

void Tasks::setName(const QString &value)

{

this->_name = value;

}

void Tasks::setTime(QDateTime value)

{

this->_time = value;

}

void Tasks::setFunctionId(int num, int value)

{

switch(num)

{

case 1:

this->_func1_id = value;

break;

case 2:

this->_func2_id = value;

break;

}

}

void Tasks::setCriterionName(int num, const QString &value)

{

switch(num)

{

case 1:

this->_criterion1_name = value;

break;

case 2:

this->_criterion2_name = value;

break;

}

}

int Tasks::id()

{

return this->_id;

}

int Tasks::userId()

{

return this->_user_id;

}

QString Tasks::name()

{

return this->_name;

}

QDateTime Tasks::time()

{

return this->_time;

}

int Tasks::functionId(int num)

{

switch(num)

{

case 1:

return this->_func1_id;

case 2:

return this->_func2_id;

}

return 0;

}

QString Tasks::function(int num)

{

int _func_id = (num == 1 ? this->_func1_id: this->_func2_id);

CriterionFunctions * cf = CriterionFunctions::byId(_func_id);

return (cf == NULL ? NULL: cf->name());

}

QString Tasks::criterionName(int num)

{

switch(num)

{

case 1:

return this->_criterion1_name;

case 2:

return this->_criterion2_name;

}

return NULL;

}

TaskData * Tasks::data(const QString &name)

{

if(!this->_data.contains(name))

{

TaskData * taskData = new TaskData;

taskData->id_efficiency = 1;

this->_data.insert(name, taskData);

}

return this->_data.value(name);

}

QStringList Tasks::dataNames()

{

return this->_data.keys();

}

Tasks *Tasks::byId(int id)

{

QSqlQuery query;

query.prepare("SELECT * FROM Tasks WHERE id_tasks=:id");

query.bindValue(":id", id);

query.exec();

if(query.next())

{

Tasks * task = new Tasks();

task->setUserId(query.value(0).toInt());

task->setId(query.value(1).toInt());

task->setName(query.value(2).toString());

task->setTime(query.value(3).toDateTime());

task->setFunctionId(1, query.value(4).toInt());

task->setFunctionId(2, query.value(5).toInt());

task->setCriterionName(1, query.value(6).toString());

task->setCriterionName(2, query.value(7).toString());

query.clear();

query.prepare("SELECT * FROM Data WHERE id_tasks=:task_id");

query.bindValue(":task_id", task->id());

query.exec();

while(query.next())

{

task->data(query.value(1).toString())->criterion1 = query.value(2).toDouble();

task->data(query.value(1).toString())->criterion2 = query.value(3).toDouble();

task->data(query.value(1).toString())->id_efficiency = query.value(4).toInt();

task->data(query.value(1).toString())->chanceN = query.value(6).toDouble();

task->data(query.value(1).toString())->softm = query.value(7).toDouble();

task->data(query.value(1).toString())->ncrit1 = query.value(8).toDouble();

task->data(query.value(1).toString())->ncrit2 = query.value(9).toDouble();

}

return task;

}

else

{

return NULL;

}

}

QList<Tasks *> Tasks::all()

{

QSqlQuery query;

query.exec("SELECT * FROM Tasks WHERE id_users=" + QString::number(Application::gI()->USER->id()));

QList<Tasks *> tasks;

while(query.next())

{

Tasks * task = new Tasks();

task->setUserId(query.value(0).toInt());

task->setId(query.value(1).toInt());

task->setName(query.value(2).toString());

task->setTime(query.value(3).toDateTime());

task->setFunctionId(1, query.value(4).toInt());

task->setFunctionId(2, query.value(5).toInt());

task->setCriterionName(1, query.value(6).toString());

task->setCriterionName(2, query.value(7).toString());

QSqlQuery queryData;

queryData.prepare("SELECT * FROM Data WHERE id_tasks=:task_id");

queryData.bindValue(":task_id", task->id());

queryData.exec();

while(queryData.next())

{

task->data(queryData.value(1).toString())->criterion1 = queryData.value(2).toDouble();

task->data(queryData.value(1).toString())->criterion2 = queryData.value(3).toDouble();

task->data(queryData.value(1).toString())->id_efficiency = queryData.value(4).toInt();

task->data(queryData.value(1).toString())->chanceN = queryData.value(6).toDouble();

task->data(queryData.value(1).toString())->softm = queryData.value(7).toDouble();

task->data(queryData.value(1).toString())->ncrit1 = queryData.value(8).toDouble();

task->data(queryData.value(1).toString())->ncrit2 = queryData.value(9).toDouble();

}

tasks.append(task);

}

return tasks;

}

void Tasks::removeAll()

{

QSqlQuery query;

query.prepare("SELECT * FROM Tasks WHERE id_users=:id");

query.bindValue(":id", Application::gI()->USER->id());

query.exec();

while(query.next())

{

QSqlQuery queryData;

queryData.prepare("DELETE FROM Data WHERE id_tasks=:task_id");

queryData.bindValue(":task_id", query.value(1).toInt());

queryData.exec();

}

query.clear();

query.prepare("DELETE FROM Tasks WHERE id_users=:id");

query.bindValue(":id", Application::gI()->USER->id());

query.exec();

}

void Tasks::save()

{

this->_user_id = Application::gI()->USER->id();

this->_time = QDateTime::currentDateTime();

QSqlQuery query;

if(this->_id == 0)

{

query.prepare("INSERT INTO Tasks ("

"id_users, "

"name_tasks, "

"save_date, "

"id_function1, "

"id_function2, "

"name_criterion1, "

"name_criterion2"

") VALUES ("

":user_id, "

":name, "

":time, "

":func1_id, "

":func2_id, "

":criterion1_name, "

":criterion2_name"

")");

}

else

{

query.prepare("UPDATE Tasks SET "

"id_users=:user_id, "

"name_tasks=:name, "

"save_date=:time, "

"id_function1=:func1_id, "

"id_function2=:func2_id, "

"name_criterion1=:criterion1_name, "

"name_criterion2=:criterion2_name "

"WHERE id_tasks=:id");

query.bindValue(":id", this->_id);

}

query.bindValue(":user_id", this->_user_id);

query.bindValue(":name", this->_name);

query.bindValue(":time", this->_time);

query.bindValue(":func1_id", this->_func1_id);

query.bindValue(":func2_id", this->_func2_id);

query.bindValue(":criterion1_name", this->_criterion1_name);

query.bindValue(":criterion2_name", this->_criterion2_name);

query.exec();

if(this->_id == 0)

{

query.clear();

query.exec("SELECT id_tasks FROM Tasks ORDER BY id_tasks DESC");

if(query.next())

{

this->_id = query.value(0).toInt();

}

}

query.clear();

query.prepare("DELETE FROM Data WHERE id_tasks=:task_id");

query.bindValue(":task_id", this->_id);

query.exec();

foreach(QString key, this->_data.keys())

{

query.clear();

query.prepare("INSERT INTO Data ("

"id_tasks, "

"name_alternative, "

"criterion1, "

"criterion2, "

"id_efficiency, "

"chance_optimality, "

"chanceN, "

"softm, "

"ncrit1, "

"ncrit2"

") VALUES ("

":task_id, "

":name, "

":criterion1, "

":criterion2, "

":efficiency, "

":chance_optimality, "

":chanceN, "

":softm, "

":ncrit1, "

":ncrit2"

")");

query.bindValue(":task_id", this->_id);

query.bindValue(":name", key);

query.bindValue(":criterion1", this->data(key)->criterion1);

query.bindValue(":criterion2", this->data(key)->criterion2);

query.bindValue(":efficiency", this->data(key)->id_efficiency);

query.bindValue(":chanceN", this->data(key)->chanceN);

query.bindValue(":softm", this->data(key)->softm);

query.bindValue(":ncrit1", this->data(key)->ncrit1);

query.bindValue(":ncrit2", this->data(key)->ncrit2);

query.exec();

}

}

void Tasks::remove()

{

QSqlQuery query;

query.prepare("DELETE FROM Tasks WHERE id_tasks=:id");

query.bindValue(":id", this->_id);

query.exec();

query.clear();

query.prepare("DELETE FROM Data WHERE id_tasks=:id");

query.bindValue(":id", this->_id);

query.exec();

this->_id = 0;

}

bool criterion1Compare(const CriterionNormalize * a, const CriterionNormalize * b)

{

return a->first < b->first;

}

bool criterion2Compare(const CriterionNormalize * a, const CriterionNormalize * b)

{

return a->second < b->second;

}

QList<CriterionNormalize *> Tasks::calculate()

{

QList<CriterionNormalize *> criterionNormalize;

foreach(QString key, this->_data.keys())

{

CriterionNormalize * cn = new CriterionNormalize;

cn->name = key;

cn->first = this->data(key)->criterion1;

cn->second = this->data(key)->criterion2;

// может это лишнее

// cn->chanceN = this->data(key)->chanceN;

// cn->ncrit1 = this->data(key)->ncrit1;

// cn->ncrit2 = this->data(key)->ncrit2;

// cn->softm = this->data(key)->softm;

//Application::gI()->onHelp(QString::number(cn->softm));

criterionNormalize.append(cn);

}

double c1_min = (*std::min_element(criterionNormalize.begin(), criterionNormalize.end(), criterion1Compare))->first;

double c2_min = (*std::min_element(criterionNormalize.begin(), criterionNormalize.end(), criterion2Compare))->second;

double c1_max = (*std::max_element(criterionNormalize.begin(), criterionNormalize.end(), criterion1Compare))->first;

double c2_max = (*std::max_element(criterionNormalize.begin(), criterionNormalize.end(), criterion2Compare))->second;

#define SIZE 50

#define SAVAT 10005

#define MAN 10

int n=0,j=0,i=0,m=0,d=0,z=0,a=0,good=0, bad=0, equ=0, Pareto[SIZE],P=0,s=0,Z1=0,K;

double A[SIZE][MAN],X[SIZE][MAN],N[SIZE][MAN],

maxS=0,minS=0,maxEf=0,minEf=0,b=0,c=0,K1=0,

K2=0,Ef=0,S=0,Normirovan[SIZE][MAN],

indeks[SIZE][MAN],interval[SIZE][MAN],Optimal[SIZE],

V[SAVAT][MAN],maxV=0,qF[SIZE],

sF[SIZE],Ma[SIZE];

//очистка от мусора

memset(A, 0, sizeof(A));

memset(X, 0, sizeof(X));

memset(N, 0, sizeof(N));

memset(Pareto, 0, sizeof(Pareto));

memset(Normirovan, 0, sizeof(Normirovan));

memset(indeks, 0, sizeof(indeks));

memset(interval, 0, sizeof(interval));

memset(Optimal, 0, sizeof(Optimal));

memset(V, 0, sizeof(V));

memset(qF, 0, sizeof(qF));

memset(sF, 0, sizeof(sF));