В данной работе рассмотрена программная реализация метода извлечения знаний «Мозговой штурм».
Цель данной работы является изучение и применение метода извлечений знаний в предметной области разработка стратегий биржевых торгов. Закрепить навыки, полученные в процессе обучения, а также создание программного продукта с реализацией метода «Мозговой штурм».
Практическая значимость полученных результатов заключается в возможности быстрого извлечения знаний экспертов в предметной области. Так как во время мозгового штурма, из-за человеческого фактора, могут происходить разногласия, один эксперт перекрикивает другого эксперта, тем самым нарушая ход мыслей экспертов, сложность записывания всех идей при наличии большого количества экспертов. Учитывая вышеприведенные факторы, имеет смысл реализовать программное средство, которое будет вести хронологический учет всех идей.
Актуальность данной темы заключается в том, что за частую сложно придумать оригинальную идею как для нового проекта, так и для усовершенствования существующих проектов. Метод извлечения знаний «Мозговой штурм», в котором эксперты по очереди озвучивают свои все идеи, даже самые необычные, что позволяет управлять чужими и своими идеями, так и комбинировать в общие идеи.
Объектом курсовой работы является метод извлечения знаний «Мозговой штурм», который позволяет удобным способом собирать данные и манипулировать ими.
Предметом курсовой работы является в получении оригинальных идей, для алгоритмических торговых стратегий при использовании метода извлечения знаний «Мозговой штурм.
Для достижения данной цели необходимо полностью изучить предметную область и из полученных знаний разработать программное приложения для извлечения знаний.
Задачи, которые необходимо реализовать в курсовой работе:
анализ предметной области «алгоритмические торговые стратегии»;
анализ метода извлечения знаний «Мозговой штурм»;
построение схем обработки данных;
спроектировать модель баз данных;
спроектировать пользовательский интерфейс;
совершить компьютерную реализацию метода извлечения знаний;
совершить тестирования программного приложения.
Курсовая работа имеет стандартную структуру и включает в себя введение, три раздела, заключение, список библиографических источников.
В введении описана цель, актуальность, практическая значимость и задачи для реализации курсовой работы. В первом разделе описана теоретическая часть, такая как изучения предметной области и анализ метода извлечения знаний. Второй раздел реализует схему обработки информации внутри требуемой информационной системы. Третий раздел это реализация программного продукта, а так его тестирование. В заключении совершенны выводы и результаты разработки
Для достижения выше перечисленных задач, необходимо подробно изучить предметную область и метод извлечения знаний при помощи которого будет осуществляется работа алгоритма программного приложения. Осуществить поиск проблем и спроектировать простой и понятный интерфейс для пользователей и осуществить реализацию.
Данная работа состоит из 3 разделов, 26 страниц, 18 рисунков, 1 приложение.
1 Теоретическая часть 1.1 Анализ предметной областиПредметная область данной работы является «алгоритмические торговые стратегии». Каждая финансовая компания имеет инвестиционный продукт, который предоставляет своим клиентам.
Торговая стратегия – набор правил, заложенных в запрограммированном алгоритме, для осуществления сделок покупки и продажи, с целью инвестирования и извлечения прибыли из любого движения ценны активов [20].
Набор идей для торговой стратегии – это правила которые будут за основу взяты внутри торговой стратегии, за частую это и является главным фактором в прибыльности стратегии.
На данный момент времени, чаще всего разработка таких продуктов сопровождается проблемами, такими как, большим количеством неприбыльных стратегий, конкуренцией торговых высокоскоростных роботов на рынке, отсутствием подходящей информации и отсутствием оригинальных идей для стратегий.
Идеи эксперты предоставляют на основе бесценного опыта в сфере торговли и наблюдениями за типичными движениями финансовых инструментов, а также внезапного осознания за счет идей других экспертов. За счет которых, может быть разработана требуемая информационная система. Смоделировав такую ситуацию, эксперт будет подвержен сильным рассуждениям на тему предметной области и это может вызвать новые идеи.
В курсовой работе осуществляется извлечение самых разных торговых идей. Разработанная система, будет предоставлять возможность эксперту вводить свои идеи, а также наблюдать за идеями других экспертов, это может сильно повлиять на дальнейший ход мыслей эксперта. После завершения прохождения эксперимента отображаются все выдвинутые идеи, из которых можно составить полноценную торговую систему.
Так же была смоделирована база данных, в которую будут записаны все идеи экспертов и в которых хранится информация о всех темах эксперимента, идеях, экспертах и информация о каждом прохождении эксперимента. Таблица тем, содержит все возможные темы, таблица идей, содержит все предлагаемые экспертами идеи, таблица экспертов, хранит информацию о всех идея которые предложил эксперт и таблица о прохождении, содержит информацию на каждого эксперта и идею, в конкретный момент времени.
Так как данная программная реализация имитирует ответы другими экспертами, был создан список возможных ответов экспертов.
После изучения анализа предметной области, необходимо перейти к анализу метода извлечения знаний.
1.2 Анализ метода извлечения знанийВ данной курсовой работе необходимо совершить компьютерную реализацию метода извлечения знаний «Мозговой штурм». Для преступлена к проектированию и разработке, необходимо осуществить анализ данного метода. Ниже предоставлено подробное описание по основным принципам работы данного метода.
Сущность метода мозгового штурма заключается в том, что отбирается группа квалифицированных экспертов, но оценки и выводы делаются в ходе заседания. Все эксперты делятся на две группы: первая генерирует идеи (выставляет оценки). При этом запрещается критиковать ту или иную идею. Идея, с которой согласится большинство экспертов, и считается правильной [3].
Преимущества метода «мозгового штурма»:
достаточно оперативен и надежен;
это максимум идей за короткий отрезок времени;
это отсутствие какой-либо критики;
это развитие, комбинация и модификация как своих, так и чужих идей.
Метод извлечения знаний «Мозговой штурм» служит для оперативного решения проблем и основывается на стимулировании творческой активности людей, принимающих в нём участие и предлагающих максимальное количество всевозможных вариантов решения. После того, как все варианты озвучены, выбираются те, которые более всего подходят для успешной реализации на практике.
Обычно мозговой штурм состоит из трёх обязательных этапов, различных по организации и правилам проведения. Этапы отображены на рисунке 1.1.
Рисунок 1.1 – Основные этапы мозгового штурма
Метод «мозгового штурма» - один из наиболее известных и широко применяемых методов генерирования новых идей путем творческого сотрудничества группы специалистов. Являясь в некотором смысле единым мозгом, группа пытается штурмом преодолеть трудности, мешающие разрешить рассматриваемую проблему. В процессе такого штурма участники выдвигают и развивают собственные идеи, стимулируя появление новых и комбинируя их.
Для обеспечения максимального эффекта «мозговой штурм» должен подчиняться определенным правилам и основываться на строгом разделении во времени процесса выдвижения идей и процесса их обсуждения и оценки. На первой стадии штурма запрещается осуждать выдвинутые идеи и предложения (считается, что критические замечания уводят к частностям, прерывают творческий процесс, мешают выдвижению идей). Роль аналитика состоит в том, чтобы активизировать творческое мышление участников заседания и обеспечить выдвижение возможно большего числа идей.
В данном разделе была предоставлена вся необходимая информация для изучения основной концепции и принципов работы метода извлечения знаний «мозговой штурм». После чего можно перейти к компьютерной реализации и тестированию.
2 Формализованная модель метода извлечения знанийВ данном разделе осуществляется реализация моделей и блок-схем обработки информации. Описывается обработка информации в программе, представлено визуально в блок-схеме.
Далее описана работа алгоритма. После запуска программного приложения, экспертам предоставляется тема обсуждения и становится доступна кнопка «Начать эксперимент». По нажатию кнопки, эксперты начинают генерировать идеи касающееся темы. Все идеи записываются в результирующую таблицу с фиксированием времени. По истечению идей у эксперта, у него есть возможность покинуть эксперимент, но результаты будут доступны только после окончания всеми экспертами. Когда все эксперты исчерпали идеи, выводится результирующая таблица, в которой в хронологическом порядки расположены все идеи. На рисунке 2.1 изображен алгоритм работы программного приложения [4].
Рисунок 2.1 – Алгоритм работы программного приложения
Перед реализацией программы была изучена предметная область и проектирование движения информации внутри информационной системы. После чего составляла база данных для программного средства. На рисунке 2.2 представлена логическая модель базы данных и связи взаимодействия между ними [5].
Рисунок 2.2 - Логическая модель базы данных
Ниже представлен физическая модель базы данных на рисунке 2.3 Поскольку логическая модель разрабатывалась на языке приятного для легкого восприятия разработчика, то для физической модели имена таблиц и атрибутов необходимо задать на английском языке, как сделано в данной работе [6].
Рисунок 2.3 - Физическая модель базы данных
Данные модели предназначены для хранения внутренней информации о моделировании эксперимента информации после прохождения.
В данном разделе была описана формализация метода извлечения знаний «Мозговой штурм», а также описан алгоритм действия данного метода. После чего можно перейти к реализации метода.
3 Практическая часть 3.1 Компьютерная реализацияДанная программа реализована на программном продукте Microsoft Visual Studio Community 2015. При помощи дополнений Windows Form, на языке программирования C#.
Язык программирования C# — язык программирования, сочетающий объектно-ориентированные и контекстно-ориентированные концепции. Компилятор C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio [1].
Программа состоит из 2-х форм. Первое окно — это главная форма приложения, которое изброжено на рисунке 3.1. В данной форме экспертам предоставляется тема, окна для ввода идей, а также логирование.
Рисунок 3.1 – Главная форма приложения
Вторая форма – это окно результатов, в котором результаты показаны в порядке хронологии ввода идей экспертами. На рисунке 3.2 изображена данная форма [20].
Рисунок 3.2 – Результирующее окно
Для множественного предоставления доступа к первой форме экспертам, необходимо каждому эксперту выделить потоки. Листинг отображен на рисунке 3.3 [15].
Поток – это некая независимая последовательность инструкций для выполнения того или иного действия в программе. В одном конкретном потоке выполняется одна конкретная последовательность действий [9].
Рисунок 3.3 – Выделение потоков
После того как у каждого эксперта есть независимый поток, они могут вносить изменения в форму. Далее моделируется работа каждого эксперта и ввод данных. И ожидается окончание сеанса каждым экспертом.
Время добавления экспертами задано случайно, чтобы главный эксперт, не заподозрил что это имитация «Мозгового штурма». Листинг на рисунке 3.4 отображает генерацию времени раздумий.
Рисунок 3.4 – Генерация времени раздумий
После раздумий, вызывается метод, который отвечает за интерактивный вывод в поле эксперта печати, и решение через сколько секунд выведутся данные в поле эксперта. Этот листинг отображен на рисунке 3.5.
Рисунок 3.5 – Имитация раздумий
После всего, имитированный эксперт наконец выводит данные в поле эксперта, так же данные записываются в поле логирования. Данные действия отображены на рисунке 3.6.
Рисунок 3.6. – Запись в поле эксперта и логирования
3.2 ТестированиеВ данном разделе рассмотрено тестирование программного приложения по извлечению знаний. Для этого запустим приложения, ознакомимся с темой «Мозгового штурма» и нажмем кнопку «Начать эксперимент». На рисунке 3.4 видно, как эксперты начали размышления, но у эксперта №4 уже есть идеи, и он одну записал.
Рисунок 3.4 - Начало эксперимента
Далее попробуем добавить свою запись, заполнив своё поле для ввода, предоставленное в специальном группированном окне. Результат заполнения поля показан на рисунке 3.5.
Рисунок 3.5 – Результат заполнения поля для ввода
После чего для отправки своей идеи необходимо нажать на кнопку «Принять», нажмем для проверки работы данного механизма и попробуем добавить ещё одну идею. Результаты изображены на рисунках 3.6 и 3.7. Как видно на данных рисунках, отправление прошло успешно.
Рисунок 3.6 - Результат отправки идеи
Рисунок 3.7 – Отправка ещё одной идеи
Далее осуществим проверку на ввод однаковых значений экспертами. Попробуем повторить идею введенную экспертом №5, но осуществим это в нижнем регистре. Заполним поле и нажмем кнопку отправить. Так же на данном изображении видно что Эксперт №5 уже покинул эксперемент, но нам это не мешает предлагать свои идеи. Выполнение данных действий изображенно на рисунках 3.8 и 3.9.
Рисунок 3.8 – Заполнение поля ввода
Рисунок 3.9 – Отправка текста и просмотр результат
Так как наши идеи были исчерпаны, нажимаем на кнопку «Закончить эксперимент». В зоне логирования, отобразилось что мы покинули эксперимент. Но при подробном наблюдении видно, что Эксперт №2 и №4 ещё не исчерпали идеи, а Эксперт №3 и №5 уже покинули эксперимент - это видно на рисунке 3.10.
Рисунок 3.10 – Просмотр статуса экспертов
На рисунке 3.11 видно, что все эксперты исчерпали свои идеи и завершили эксперимент.
Рисунок 3.11 – Эксперты завершили эксперимент
Так же стала доступна кнопка «Посмотреть результаты». Нажмем на неё для просмотра результатов. После чего отображается новое модальное окно, в котором в хронологическом порядке отображены все идеи, предложенные экспертами. На рисунке 3.12 отображены все результаты.
Рисунок 3.12 – Вывод хронологического списка результатов
В данном разделе была описана реализация и тестирование программного приложения, по методу извлечения знаний «Мозговой штурм».
ЗаключениеВ процессе выполнения курсовой работы, компьютерная реализация метода извлечения знаний «Мозговой штурм», были выполнены и решены задачи, и достигнута установленная цель необходимая для реализации программного продукта.
В данной работе была изучена предметная область автоматизированная торговая стратегия, выделены основные понятия, связанные с данной областью. Выбран метод извлечения знаний, составлен алгоритм, спроектирована база данных и разработано программное обеспечение.
Разработанное программное обеспечение имеет достаточно удобный, а также интуитивный интерфейс, пространство используется максимально эффективно и эргономично.
В данной работе были подробно описаны все этапы, которые необходимо реализовать на пути к получению программной системы – метода извлечения знаний «Мозговой штурм».
Главные задачи, которые были рассмотрены в данной курсовой работе:
анализ предметной области «алгоритмические торговые стратегии»;
анализ метода извлечения знаний «Мозговой штурм»;
проектирование схем обработки данных;
спроектирована модель базы данных;
спроектирован пользовательский интерфейс;
совершена компьютерная реализация метода извлечений знаний;
реализовано тестирование программного приложения.
Таким образом, все задачи в курсовой работе решены и поставленная цель была успешно достигнута.
Для дальнейшего улучшения программы рекомендуется увеличить базу данных, добавить туда больше экспертов и разные предметные области для экспериментов. А также что бы в эксперименте могли принимать участие любое число экспертов в различных, экспериментах на различные темы. Так же предусмотреть, что бы эксперты методом голосования могли осуществлять выбор для себя более подходящую и интересующею тему для дальнейшего обсуждения, если тема не устраивает какого-то эксперта он сразу покидает эксперимент не начав его. При расширении количества осуществить разработку адаптивного интерфейса. Рекомендуется программное средство сделать кроссплатформенным.
Всё это позволит автоматизировать и усовершенствовать программный продукт. Необходимо будет выбрать количество экспертов, далее выбирается предметная область для обсуждения и после если кто-то не доволен темой сразу покидает эксперимент даже не начав его.
Данная работа была максимально точно и подробно описана, что позволяет без начальных знаний приступать к изучению данной работы. Задача была реализована при помощи прохождения курса обучения по дисциплине «Интеллектуальные информационные системы».
Библиографические источникиПавловская Т.А. С# Программирование на языке высокого уровня: Учеб. пособие [Текст] / Т.А. Павловская. – СПБ.: Питер, 2009. – 432 с.
Потапов А. Искусственный интеллект и универсальное мышление [Текст] / А. Потапов. - М.: Политехника, 2012. - 712 с.
Витяев Е.Е. Извлечение знаний из данных. Компьютерное познание. Модели когнитивных процессов [Текст] / Е.Е. Витяем. – Новосиб.: Гос. Унив., 2006. - 293 с.
Флах П. Машинное обучение. Наука и искусство построения алгоритмов, которые извлекают знания из данных [Текст] / П. Флах. - Москва: ДМК, 2015, - 400 с.
Мурашко А.Г. Извлечение знаний из баз данных при помощи нейронной сети и нечеткого интерпретатора [Текст] / А.Г. Мурашко, И.В. Шевченко. – Кремч.: Истина, 2008. -44 с.
Лёзин И.А. Извлечение данных из больших массивов данных [Текст] / И.А Лёзин, Д.Е. Макарелов. – Самара: Гос. Унив., 2014, - 339 с.
Болотова Л.С. Системы искусственного интеллекта. Модели и технологии, основанные на знаниях [Текст] / Л.С. Болотова. - М.: Финансы и статистика, 2012. - 664 с.
Дольников, В. Л. Основы программирования на языке С#. Примеры лабораторных работ: лабораторный практикум [Текст] / В. Л. Дольников, О. П. Якимова; Яросл. гос. ун-т им. П. Г. Демидова. – Ярославль: ЯрГУ, 2010. – 64 с.
Бостром Н. Искусственный интеллект. Этапы. Угрозы. Стратегии [Текст] / Н. Бостром. - Москва: Иванов и Фербер, 2016. – 496 с
Матвеев М.Г. : Учеб. пособие [Текст] / М.Г. Матвеев, А.С. Свиридов, Н.А. Алейникова. – М.: Финансы и статистика; ИНФА-М, 2008. – 446 с.
Путькина Л.В. Интеллектуальные информационные системы [Текст] / Л.В. Путькина, Т.Г. Пискунова. – СПБ.: СПбГУП, 2009. – 206 с.
Пальмов С. В. Интеллектуальный анализ данных: учебное пособие [Текст] / С. В. Пальмов. – Самара: ПГУТИ, 2017. – 124 с.
Гаврилова Т.А. Инженерия знаний. Модели и методы [Текст] / Т.А. Гаврилова, Д.В. Кудрявцев, Д.И. Муромцев. – СПБ.: Лань, 2016. – 324 с.
Алексеев А.А. Основы параллельного программирования с использованием Visual Studio 2010 [Текст] / А.А. Алексеев – М.: Интуит, 2016г.- 332 с.
Бодров О.А. Предметно-ориентированные экономические информационные системы: Учебник для вузов [Текст] / О.А. Бодров. - М.: Гор. линия-Телеком, 2013г. - 244 c
Мезенцев К.Н. Автоматизированные информационные системы: Учебник для студентов учреждений среднего профессионального образования [Текст] / К.Н. Мезенцев. - М.: ИЦ Академия, 2013. - 176 c.
Халл Д. К. Опционы, фьючерсы и другие производные финансовые инструменты [Текст] / Д.К. Халл – М.:Вильямс, 2013. – 1072 с.
Мэрфи Д. Д. Технический анализ финансовых рынков. Полный справочник по методам и практике трейдинга [Текст] / Д. Д. Мэрфи – М.: Вильямс, 2016. - 496с.
Кесенбери У. Сторителлинг в проектировании интерфейсов. Как создавать истории, улучшающие дизайн [Текст] / Кесенбери У. К. Брукс. – Москва: Иванов и Фербер, 2013. – 256с.
Словарь трейдера. Основные понятия [Электронный ресурс] / Режим доступа: http://success-everywhere.ru/finansi/birzha-i-rinok/slovar_trejdera, свободный. — Загл. с экрана. — Яз. рус., англ и другие.
Свободная энциклопедия [Электронный ресурс] / Режим доступа: https://ru.wikipedia.org/, свободный. — Загл. с экрана. — Яз. рус., англ и другие.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Mindstorms
{
public partial class Form1 : Form
{
List data_set = new List();
List bot_leave = new List();
int length_data_set = 0;
bool end_exp = false;
Random rand = new Random();
List result_list = new List();
public Form1()
{
InitializeComponent();
FillDataSet();
listBox6.Items.Add(DateTime.Now.ToString() + ": Тема эксперемента "Какие данные использовать для прогнозирования рынка"!");
button1.Enabled = false;
}
private bool CheckValue(ListBox lb)
{
for (int i = 0; i < lb.Items.Count; i++)
{
if (textBox1.Text.ToLower() == lb.Items[i].ToString().ToLower())
{
textBox1.Text = "Такое значение уже существует";
textBox1.ForeColor = Color.Gray;
return true;
}
}
return false;
}
private bool CheckValueBot(ListBox lb, string value)
{
for (int i = 0; i < lb.Items.Count; i++)
{
if (value.ToLower() == lb.Items[i].ToString().ToLower())
return true;
}
return false;
}
#region Event
//Обработка отправки
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox1.Text == "Введите свой вариант" || textBox1.Text == "Такое значение уже существует")
return;
if (CheckValue(listBox1) || CheckValue(listBox2) || CheckValue(listBox3) || CheckValue(listBox4) || CheckValue(listBox5))
return;
for (int i = 0; i < data_set.Count; i++)
{
if (textBox1.Text == data_set[i])
data_set.RemoveAt(i);
}
listBox1.Items.Add(textBox1.Text);
Logging("Вы добавили " + textBox1.Text + "!");
result_list.Add(DateTime.Now.ToString() + ": " + textBox1.Text);
textBox1.Text = "Введите свой вариант";
textBox1.ForeColor = Color.Gray;}
//Обработка входа на вход
private void textBox1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "Введите свой вариант" || textBox1.Text == "Такое значение уже существует")
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
}
//Обработка выхода
private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.Text = "Введите свой вариант";
textBox1.ForeColor = Color.Gray;
}
}
//Загрузка формы
private void Form1_Load(object sender, EventArgs e)
{ textBox1.ForeColor = Color.Gray; }
#endregion
#region FillData
private void FillDataSet()
{
StreamReader sr = new StreamReader("Тест.txt");
while (!sr.EndOfStream)
{
data_set.Add(sr.ReadLine());
}
length_data_set = data_set.Count;
for (int i = 0; i < 4; i++)
{
bot_leave.Add(false);
}
sr.Close();
}
private void Logging(string text)
{
listBox6.Invoke(new Action(() =>
{
listBox6.Items.Add(DateTime.Now.ToString() + ": " + text);
}));
}
#endregion
#region Imitation
private void ImitationTime(ListBox lb, int millisecond, int index)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
double temp = 0.5;
while (stopWatch.ElapsedMilliseconds < millisecond)
{
if (stopWatch.ElapsedMilliseconds / (double)1000 > temp)
{
if (lb.Items[index].ToString().Length >= 3)
{
lb.Invoke(new Action(() =>
{
lb.Items[index] = ".";
}));
}
else
{
lb.Invoke(new Action(() =>
{
lb.Items[index] += ".";
}));
}
temp += 0.5;
}
}
stopWatch.Stop();
}
private bool CheckLeaveBot(Random rand, int index_bot)
{
double coef = 0;
if (data_set.Count != 0)
coef = (double)data_set.Count / length_data_set + 0.33;
if (listBox1.Items.Count >= 2 && rand.NextDouble() > coef || data_set.Count == 0)
{
bot_leave[index_bot] = true;
//bot вышел
if (data_set.Count > 0)
{
bool is_all_true = true;
for (int i = 0; i < 4; i++)
{
if (!bot_leave[i])
is_all_true = false;
}
if (is_all_true)
{
bot_leave[index_bot] = false;
}
}
return bot_leave[index_bot];
}
return false;
}
private void ImitationBot(int index_bot, ListBox lb, int millisecond, Random rand, int length_data, bool leave = false)
{
if (bot_leave[index_bot])
return;
lb.Invoke(new Action(() =>
{
lb.Items.Add("");
}));
int index = lb.Items.Count - 1;
//Время ...
ImitationTime(lb, millisecond, index);
if (CheckLeaveBot(rand, index_bot))
{
lb.Invoke(new Action(() =>
{
lb.Items.RemoveAt(index);
lb.Enabled = false;
}));
Logging("Эксперт №" + (index_bot + 2).ToString() + " покинул эксперемент!");
return;
}
if (0 < data_set.Count)
{
bool chek = true;
while (data_set.Count > 0 && chek)
{
if (CheckValueBot(listBox1, data_set[0]))
{
data_set.RemoveAt(0);
}else
{
chek = false;
}
}
if (!chek)
{
string add_item = data_set[0];
lb.Invoke(new Action(() =>
{
lb.Items[index] = data_set[0];
result_list.Add(DateTime.Now.ToString() + ": " + data_set[0]);
}));
data_set.RemoveAt(0);
Logging("Эксперт №" + (index_bot + 2).ToString() + " добавил " + add_item + "!");
}
}
if (data_set.Count == 0)
{
lb.Invoke(new Action(() =>
{
lb.Enabled = false;
}));
}
}
#region Imitation
private void CheckEnd()
{
if (!listBox2.Enabled && !listBox3.Enabled && !listBox4.Enabled && !listBox4.Enabled)
{
button3.Invoke(new Action(() =>
{
button3.Enabled = true;
}));
}
}
private void Imitation1()
{
int second = 50000;
int length_input_data = listBox1.Items.Count;
while (data_set.Count > 0 && !bot_leave[0])
{
int time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(0, listBox2, time_wait, rand, length_input_data);
}
CheckEnd();
}
private void Imitation2()
{
int second = 50000;
int length_input_data = listBox1.Items.Count;
while (data_set.Count > 0 && !bot_leave[1])
{
int time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(1, listBox3, time_wait, rand, length_input_data);
}
CheckEnd();
}
private void Imitation3()
{
int second = 50000;
int length_input_data = listBox1.Items.Count;
while (data_set.Count > 0 && !bot_leave[2])
{
int time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(2, listBox4, time_wait, rand, length_input_data);
}
CheckEnd();
}
private void Imitation4()
{
int second = 50000;
int length_input_data = listBox1.Items.Count;
while (data_set.Count > 0 && !bot_leave[3])
{
int time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(3, listBox5, time_wait, rand, length_input_data);
}
CheckEnd();
}
#endregion
private void Imitation()
{
int second = 1000;
int length_input_data = listBox1.Items.Count;
if (length_input_data == 1)
second = 10000;
else if (length_input_data 4)
second = 10000;
Random rand = new Random();
int time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(0, listBox2, time_wait, rand, length_input_data);
time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(1, listBox3, time_wait, rand, length_input_data);
time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(2, listBox4, time_wait, rand, length_input_data);
time_wait = Convert.ToInt32(rand.NextDouble() * second);
ImitationBot(3, listBox5, time_wait, rand, length_input_data);
if (!end_exp)
{
button1.Invoke(new Action(() =>
{
button1.Enabled = true;
}));
button2.Invoke(new Action(() =>
{
button2.Enabled = true;
}));
Logging("Введите дааные!");
}
}
private void EndImitation()
{
bool is_all_true = false;
for (int i = 0; i < 4; i++)
{
if (!bot_leave[i])
is_all_true = true;
}
while (data_set.Count >= 0 && is_all_true)
{
Imitation();
is_all_true = false;
for (int i = 0; i < 4; i++)
{
if (!bot_leave[i])
is_all_true = true;
}
}
button3.Invoke(new Action(() =>
{
button3.Enabled = true;
}));
//Вывод
}
#endregion
private void button2_Click(object sender, EventArgs e)
{
end_exp = true;
Logging("Вы покинули эксперемент!");
button1.Enabled = false;
button2.Enabled = false;
//Thread th = new Thread(EndImitation);
//th.Start();
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
public List GetData()
{
return result_list;
}
private void button4_Click(object sender, EventArgs e)
{
button1.Enabled = true;
listBox6.Items.Add(DateTime.Now.ToString() + ": Начало эксперемента!");
listBox6.Items.Add(DateTime.Now.ToString() + ": Введите данные!");
Thread th = new Thread(Imitation1);
th.Start();
th = new Thread(Imitation2);
th.Start();
th = new Thread(Imitation3);
th.Start();
th = new Thread(Imitation4);
th.Start();
button4.Enabled = false;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (textBox1.Text == "Введите свой вариант" || textBox1.Text == "Такое значение уже существует")
{
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.Enter || !button1.Enabled)
return;
if (textBox1.Text == "" || textBox1.Text == "Введите свой вариант" || textBox1.Text == "Такое значение уже существует")
return;
if (CheckValue(listBox1) || CheckValue(listBox2) || CheckValue(listBox3) || CheckValue(listBox4) || CheckValue(listBox5))
return;
for (int i = 0; i < data_set.Count; i++)
{
if (textBox1.Text == data_set[i])
data_set.RemoveAt(i); }
listBox1.Items.Add(textBox1.Text);
result_list.Add(DateTime.Now.ToString() + ": " + textBox1.Text);
Logging("Вы добавили " + textBox1.Text + "!");
textBox1.Text = "Введите свой вариант";
textBox1.ForeColor = Color.Gray;
}}}