Файл: Курсовая работа по дисциплине Основы искусственного интеллекта.doc

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 124

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


К числу принципиально важных решений, которые реализованы корпорацией Microsoft в языке программирования C#, можно отнести следующие: - компонентно-ориентированный подход к программированию (который характерен и для идеологии Microsoft .NET в целом); - свойства как средство инкапсуляции данных (характерно также в целом для ООП); - обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try); - унифицированная система типизации (соответствует идеологии Microsoft .NET в целом); - делегаты (delegate – развитие указателя на функцию в языках C и C++); - индексаторы (indexer – операторы индекса для обращения к элементам класса- контейнера); - перегруженные операторы (развитие ООП); - оператор foreach (обработка всех элементов классов-коллекций, аналог Visual Basic); - механизмы boxing и unboxing для преобразования типов; - атрибуты (средство оперирования метаданными в COM-модели); - прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).

3 Руководство по эксплуатации программного средства

3.1 Требования к системным ресурсам



Для работы ПП используется персональный компьютер, удовлетворяющий следующим системным требованиям:

Минимальная конфигурация:

– процессор с частотой не менее 0.5 ГГц;

– свободное место на жестком диске не менее 0.3 Мб;

– объем оперативного запоминающего устройства не менее 32 Мб.

– Требования к информационной и программной совместимости:

– Язык: C#, Microsoft .NET Framework 4.5;

– Прикладная программа ОС: Windows ХР/Vista/7/8/10;

Объем программы: 0.212 Мб.

3.2 Руководство пользователя



Для запуска программы необходимо запустить файл ProfessionTest.exe из папки с программой. В папке с программой также находится документ Microsoft Excel в котором указаны специальности и значения качеств, которым они соответствуют. Их можно изменить в любой момент, также, как и количество профессий и характеристик.

Рисунок 3 – Таблица знаний в Word Excel
Запускаем программу для тестирования ProfessionTest.exe. Пример показан на рисунке 4.

Рисунок 4 – Начальный экран приложения

Указываем свое имя, пол и возраст и начинаем тестирование. Примеры показаны на рисунке 5 и на рисунке 6.


Рисунок 5 – Промежуточные этапы тестирования

Рисунок 6 – Промежуточные этапы тестирования
В окне результаты выводят результаты коэффицентов тестирования, показывающие интенстивность развития навыка у тестируемого. Изменяются в диапазоне от 0 до 1. Пример показан на рисунке 7.



Рисунок 7 – Окно результатов для ознакомления с параметрами
После необходимо открыть окно с детальными результатами в котором рассчитываются коэффициенты композиции нечетких множеств, по большему делается выбор профессии. Для расчёта используются разные алгоритмы композиции нечетких множеств, такие как:

Рисунок 8 – Виды композиций используемых в программе

Р исунок 9 – Пример результата оценки наиболее подходящей профессии

Рисунок 10 – Пример результата оценки наиболее подходящей профессии

З аключение
В результате выполненных исследований была сделана программная реализация алгоритма системы-советчика выбора профессии по новым информационным технологиям. Были реализованы 2 нечетких множества, соответствие между которыми определяет композиционными правилами, результат которых может вычислять по различным алгоритмам, таким как max-min, max-prod композиция и др. Анализ показывает, что имеющимся кандидатам можно порекомендовать обучение по специальностям на основе максимальных значений функции принадлежности композиции рассматриваемых нечетких отношений.



Прикладная программа была протестирована при помощи среды разработки «Visual Studio 2019». Результаты тестирования свидетельствуют об адекватности работы ПП.

Прикладная программа создана с учетом дизайн-эргономических требований, предъявляемых к разработке программных средств учебного назначения.

С писок использованных источников





  1. Семенов, А.М. Интеллектуальные системы [Текст] : учебное пособие для студентов, обучающихся по программам высшего профессионального образования по направлениям подготовки 230100.68 Информатика и вычислительная техника, 231000.68 Программная инженерия / А. М. Семенов, Н. А. Cоловьев, Е. Н. Чернопрудова, А. С. Цыганков; М-во образования и науки Рос. Федерации, Федер. гос. бюджет. образоват. учреждение высш. проф. образования "Оренбург. гос. ун-т". - Оренбург : ОГИМ, 2014. - 237 с. - Библиогр.: с. 218-221. - Прил.: с. 222-236. - ISBN 978-5-9723-0158-4. Издание на др.носителе [Электронный ресурс]

  2. Семенов, А.М. Интеллектуальные системы [Электронный ресурс] : учебное пособие для студентов, обучающихся по программам высшего профессионального образования по направлениям подготовки 230100.68 Информатика и вычислительная техника, 231000.68 Программная инженерия / А. М. Семенов [и др.]; М-во образования и науки Рос. Федерации, Федер. гос. бюджет. образоват. учреждение высш. проф. образования "Оренбург. гос. ун-т". - Электрон. текстовые дан. (1 файл: 3.85 Мб). - Оренбург : ОГУ, 2013. - 236 с. - Загл. с тит. экрана. -Adobe Acrobat Reader 6.0-ISBN978-5-9723-0158-4..      Издание на др. носителе [Текст] 

  3. Барсегян, А. А. Анализ данных и процессов: учеб. пособие / А. А. Барсегян, М. С. Куприянов, И. И. Холод, М. Д. Тесс, С. И. Елизаров. - 3-е изд., перераб. и доп. - СПб.: БХВ-Петербург, 2009.- 512 с. Режим доступа: http://znanium.com/catalog/product/350638

  4. Quinlan, J. R., (1986). Induction of Decision Trees. Machine Learning 1: 81-106, Kluwer Academic Publishers

  5. Ананий В. Левитин Глава 10. Ограничения мощи алгоритмов: Деревья принятия решения // Алгоритмы: введение в разработку и анализ = Introduction to The Design and Analysis of Aigorithms. — М.: «Вильямс», 2006. — С. 409-417.


Приложение А


(обязательное)

Архитектура программного средства







Рисунок А.1 – Архитектура программного средства

Приложение Б


(обязательное)

Укрупненная схема алгоритма

Рисунок Б.1 – Укрупненная схема алгоритма

Приложение В


(обязательное)

Функциональная схема программного средства


Рисунок В.1 – Функциональная схема программного средства


Приложение Г


(обязательное)

Частичный листинг программы

Main.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Security.Cryptography.X509Certificates;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Excel = Microsoft.Office.Interop.Excel;
namespace test

{

public partial class Form1 : Form

{

private Microsoft.Office.Interop.Excel.Application ObjExcel;

private Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;

private Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
List str = new List();
public string name;

public double[] coeff;

public Form1(string name, double[] arr)

{

InitializeComponent();

coeff = arr;

this.name = name;

dataGridView2.Columns[1].HeaderText = this.name;

loadGrid();

loadGrid1();
}
private void loadGrid()

{
string pathToFile = "C:\\Users\\Александр\\Desktop\\огу\\ои\\практики\\ПЗ №3 +\\практика\\1.xlsx";
try

{

ObjExcel = new Microsoft.Office.Interop.Excel.Application();

ObjWorkBook = ObjExcel.Workbooks.Open(pathToFile);

ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

Microsoft.Office.Interop.Excel.Range rg = null;
Int32 row = 1;

dataGridView1.Rows.Clear();

List arr = new List();

while (ObjWorkSheet.get_Range("a" + row, "a" + row).Value != null)

{

rg = ObjWorkSheet.get_Range("a" + row, "u" + row);

foreach (Microsoft.Office.Interop.Excel.Range item in rg)

{

try

{

arr.Add(item.Value.ToString().Trim());

}

catch { arr.Add(""); }

}

dataGridView1.Rows.Add(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]/*, arr[12], arr[13], arr[14], arr[15], arr[16], arr[17], arr[18], arr[19], arr[20]*/);

arr.Clear();

row++;

}

}

catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла", MessageBoxButtons.OK, MessageBoxIcon.Error); }

{
ObjWorkBook.Close(false, "", null);

ObjExcel.Quit();

ObjWorkBook = null;

ObjWorkSheet = null;

ObjExcel = null;

}

}
private void loadGrid1()

{
string pathToFile1 = "C:\\Users\\Александр\\Desktop\\огу\\ои\\практики\\ПЗ №3 +\\практика\\23.xlsx";
try

{

ObjExcel = new Microsoft.Office.Interop.Excel.Application();

ObjWorkBook = ObjExcel.Workbooks.Open(pathToFile1);

ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

Microsoft.Office.Interop.Excel.Range rg = null;
Int32 row = 1;

dataGridView2.Rows.Clear();

List arr = new List();

while (ObjWorkSheet.get_Range("a" + row, "a" + row).Value != null)

{

rg = ObjWorkSheet.get_Range("a" + row, "u" + row);

foreach (Microsoft.Office.Interop.Excel.Range item in rg)

{

try

{

arr.Add(item.Value.ToString().Trim());

}

catch { arr.Add(""); }

}

dataGridView2.Rows.Add(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]/*, arr[12], arr[13], arr[14], arr[15], arr[16], arr[17], arr[18], arr[19], arr[20]*/);

arr.Clear();

row++;

}

}

catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла", MessageBoxButtons.OK, MessageBoxIcon.Error); }

{
ObjWorkBook.Close(false, "", null);

ObjExcel.Quit();

ObjWorkBook = null;

ObjWorkSheet = null;

ObjExcel = null;

}
for (int i = 0; i < 10; i++)

{

dataGridView2.Rows[i].Cells[1].Value = Math.Round(coeff[i], 2);

}

}
private void button3_Click(object sender, EventArgs e)

{

dataGridView3.Rows.Clear();
dataGridView3.Columns.Add("Column0", "Профессия");

dataGridView3.Columns.Add("Column1", name);
dataGridView3.Rows.Add();

dataGridView3.Rows[0].Cells[0].Value = "Менеджер";

dataGridView3.Rows.Add();

dataGridView3.Rows[1].Cells[0].Value = "Программист";

dataGridView3.Rows.Add();

dataGridView3.Rows[2].Cells[0].Value = "Водитель";

dataGridView3.Rows.Add();

dataGridView3.Rows[3].Cells[0].Value = "Секретарь";

dataGridView3.Rows.Add();

dataGridView3.Rows[4].Cells[0].Value = "Переводчик";

dataGridView3.Rows.Add();
int g = 0;

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

{

for (g = 1; g < 2; g++)

{

for (int j = 0; j < 5; j++)

{

str.Add(Convert.ToDouble(dataGridView1.Rows[i].Cells[j + 1].Value) * Convert.ToDouble(dataGridView2.Rows[j].Cells[g].Value));

}

dataGridView3.Rows[i].Cells[g].Value = str.Max().ToString();

str.Clear();

}

}

double[] mass = new double[5];
for (int i = 0; i < 5; i++)

{

mass[i] = Convert.ToDouble(dataGridView3.Rows[i].Cells[1].Value);

}
double maxVal = mass.Max();

int indexMax = Array.IndexOf(mass, maxVal);
textBox2.Text = Convert.ToString(dataGridView3.Rows[indexMax].Cells[0].Value);

}

}

}

Test.cs

using Microsoft.Office.Interop.Excel;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;
namespace test

{

public partial class Form2 : Form

{

public new string name;

public new string questionNum;

public new int age;

public double[] answers = new double[27];
public Form2()

{

InitializeComponent();

}
private void Form2_Load(object sender, EventArgs e)

{
}
public void QuestionsInit(int i)

{

if (i == 2)

label5.Text = "Я предпочту заниматься финансовыми операциями, а не, например, музыкой.";

if (i == 3)

label5.Text = "Невозможно точно рассчитать, сколько времени уйдет на дорогу до работы, по крайней мере, мне.";

if (i == 4)

label5.Text = "Я часто рискую.";

if (i == 5)

label5.Text = "Меня раздражает беспорядок.";

if (i == 6)

label5.Text = "Я охотно почитал(а) бы на досуге о последних достижениях в различных областях науки.";

if (i == 7)

label5.Text = "Записи, которые я делаю, не очень хорошо структурированы и организованы.";

if (i == 8)

label5.Text = "Я предпочитаю разумно распределять деньги, а не тратить все сразу.";

if (i == 9)

label5.Text = "У меня наблюдается, скорее, рабочий беспорядок на столе, чем расположение вещей по аккуратным «стопочкам».";

if (i == 10)

label5.Text = "Меня привлекает работа, где необходимо действовать согласно инструкции или четко заданному алгоритму.";

if (i == 11)

label5.Text = "Если бы я что-то собирал(а), я бы постарался(ась) привести в порядок коллекцию, все разложить по папочкам и полочкам.";

if (i == 12)

label5.Text = "Терпеть не могу наводить порядок и систематизировать что бы то ни было.";

if (i == 13)

label5.Text = "Мне нравится работать на компьютере – оформлять или просто набирать тексты, производить расчеты.";

if (i == 14)

label5.Text = "Прежде чем действовать, надо продумать все детали.";

if (i == 15)

label5.Text = "На мой взгляд, графики и таблицы – очень удобный и информативный способ предоставления информации.";

if (i == 16)

label5.Text = "Мне нравятся игры, в которых я могу точно рассчитать шансы на успех и сделать осторожный, но точный ход.";

if (i == 17)

label5.Text = "При изучении иностранного языка я предпочитаю начинать с грамматики, а не получать разговорный опыт без знания грамматических основ.";

if (i == 18)

label5.Text = "Сталкиваясь с какой-либо проблемой, я пытаюсь всесторонне ее изучить (ознакомиться с соответствующей литературой, поискать нужную информацию в интернете, поговорить со специалистами).";

if (i == 19)

label5.Text = "У меня есть ежедневник, в который я записываю важную информацию на несколько дней вперед.";

if (i == 20)

label5.Text = "Я с удовольствием смотрю новости политики и экономики.";

if (i == 21)

label5.Text = "Я доделываю работу в последний момент.";

if (i == 22)

label5.Text = "Взяв книгу, я всегда ставлю ее на место.";

if (i == 23)

label5.Text = "Когда я ложусь спать, то уже наверняка знаю, что буду делать завтра.";

if (i == 24)

label5.Text = "В своих словах и поступках я следую пословице «Семь раз отмерь, один – отрежь».";

if (i == 25)

label5.Text = "Перед ответственными делами я всегда составляю план их выполнения.";

if (i == 26)

label5.Text = "После вечеринки мытье посуды я откладываю до утра.";

if (i == 27)

label5.Text = "Я серьезно отношусь к своему здоровью.";

}
public void AnswersInit(int i)

{

if (radioButton3.Checked)

answers[i - 2] = 1;

if (radioButton4.Checked)

answers[i - 2] = 0.5;

if (radioButton5.Checked)

answers[i - 2] = 0;

}
public double[] Function(double[] arr)

{

double[] outarr = new double[10];

double result = 0;

Random rnd = new Random();
for(int i = 0; i < arr.Length; i++)

{

result += arr[i];

}
result = result / arr.Length;
for (int i = 0; i < outarr.Length; i++)

{

double gen = rnd.Next(0, 27);

gen = gen / 100;

outarr[i] = result + gen;
}
return outarr;

}
int i = 2;

private void button1_Click(object sender, EventArgs e)

{

age = Convert.ToInt32(textBox1.Text);

questionNum = "Вопрос: " + i + " из 27";

label4.Text = questionNum;

name = textBox2.Text;

if (i == 28)

{

this.Hide();

Form ifrm = new Form3(this.name, Function(answers));

ifrm.ShowDialog();

}


QuestionsInit(i);

AnswersInit(i);
i++;

}

}

}