Анализ тональности текстов на основе ДСМ-метода

Описание ДСМ-метода автоматического порождения гипотез. Исследование результатов влияния компонентов ДСМ-метода на качество определения тональности текстов. Алгоритм поиска пересечений. N-кратный скользящий контроль. Программная реализация ДСМ-метода.

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

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

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

BuildHashSet(dict, "NormalizedTexts\\PlusSamples", out plusSamples, '+');

BuildHashSet(dict, "NormalizedTexts\\MinusSamples", out minusSamples, '-');

BuildHashSet(dict, "NormalizedTexts\\TauSamples", out tauSamples, 't');

// Проверка необходимости проведения процедуры кросс-валидации

if (!error && index < args.Length && args[index][0] == '-' && args[index][1] == 'c')

{

// Запускаем таймер

timer.Start();

string[] str = args[index].Split('/');

int numBlocks = 5;

if (str.Length > 2)

{

error = true;

Console.WriteLine("Ошибка! Неверно задан параметр перекресной проверки");

}

else if (str.Length == 2)

{

try

{

numBlocks = int.Parse(str[1]);

if (numBlocks < 2 || numBlocks > Math.Min(plusSamples.Length, minusSamples.Length))

{

error = true;

Console.WriteLine("Ошибка! Количество блоков должно быть в диапазоне от {0} до {1}", "2",

Math.Min(plusSamples.Length, minusSamples.Length));

}

}

catch

{

error = true;

Console.WriteLine("Ошибка! Неверно задано количество блоков");

}

}

if (!error)

{

// Средние показатели эффективности

EffectMeasure averAffectMeasure = new EffectMeasure();

RandomSort(plusSamples);

RandomSort(minusSamples);

CrossValidator cv = new CrossValidator();

cv.ProcessTexts(plusSamples, minusSamples, ref averAffectMeasure, numBlocks,

imbalance, typeFuncResolution);

timer.Stop();

PrintResultCrossValidation("Average value on " + numBlocks.ToString() + " tests:",

averAffectMeasure, timer.ElapsedMilliseconds);

timer.Reset();

index++;

}

}

// Проверка необходимости классификации тау-текстов

if (!error && index < args.Length && args[index] == "-t")

{

timer.Start();

JsmProcessor jp = new JsmProcessor();

// Список гипотез

List<Hypothesis> plusHypotheses = new List<Hypothesis>();

List<Hypothesis> minusHypotheses = new List<Hypothesis>();

// Индукция

jp.Induction(plusHypotheses, plusSamples);

jp.Induction(minusHypotheses, minusSamples);

List<Hypothesis>[] coincidedHyp;

// Аналогия

jp.Analogy(plusHypotheses, minusHypotheses, tauSamples, out coincidedHyp);

char[] resClassification = new char[tauSamples.Length];

// Классификация тау-текстов

jp.Classification(resClassification, coincidedHyp, imbalance, typeFuncResolution);

timer.Stop();

PrintResultClassification(resClassification, tauSamples, timer.ElapsedMilliseconds);

index++;

}

if (!error && index < args.Length)

{

Console.WriteLine("Ошибка! Команда содержит неизвестные параметры или последовательность параметров задана неверно");

error = true;

}

}

else

{

Console.WriteLine("Ошибка! Неверное количество параметров");

error = true;

}

if (error)

{

Console.WriteLine("Синтаксис команды:");

Console.WriteLine("JSM_VS [-n] [f] [k] [-c/b] [-t] [-help]");

Console.WriteLine("\t-n\tвыполнить нормализацию текстов");

Console.WriteLine("\tf\tтип функции разрешения конфликтов (по умолчанию 1)");

Console.WriteLine("\t\t1\tна основе суммарного кол-ва гипотез");

Console.WriteLine("\t\t2\tна основе суммарного кол-ва характеристик");

Console.WriteLine("\t\t3\tна основе суммарного кол-ва родителей");

Console.WriteLine("\t\t4\tпроизведение кол-ва характеристик на кол-во родителей");

Console.WriteLine("\t\t5\tвзвешенное среднее арифметическое числа характеристик");

Console.WriteLine("\t\t6\tвзвешенное среднее арифметическое числа родителей");

Console.WriteLine("\tk\tкоэффициент дисбаланса (+) и (-) текстов (по умолчанию 1)");

Console.WriteLine("\t-с\tвыполнить перекрестную проверку");

Console.WriteLine("\t\tb\tколичество блоков (по умолчанию 5)");

Console.WriteLine("\t-t\tвыполнить распознавание t-текстов");

Console.WriteLine("\t-help\tвызвать справку по команде");

}

else

Console.WriteLine("Программа успешно выполнена!");

}

}

}

Файл TextNormalizer.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Runtime.InteropServices;

namespace JSM_VS

{

class TextNormalizer

{

private struct PROCESS_INFORMATION

{

public IntPtr hProcess;

public IntPtr hThread;

public uint dwProcessId;

public uint dwThreadId;

}

private struct STARTUPINFO

{

public uint cb;

public string lpReserved;

public string lpDesktop;

public string lpTitle;

public uint dwX;

public uint dwY;

public uint dwXSize;

public uint dwYSize;

public uint dwXCountChars;

public uint dwYCountChars;

public uint dwFillAttribute;

public uint dwFlags;

public short wShowWindow;

public short cbReserved2;

public IntPtr lpReserved2;

public IntPtr hStdInput;

public IntPtr hStdOutput;

public IntPtr hStdError;

}

[DllImport("kernel32.dll")]

static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes,

bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment,

string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);

/// <summary>

/// Процедура нормализации текстов

/// </summary>

/// <param name="source"></param>

/// <param name="destination"></param>

public void Normalize(string source, string destination)

{

DirectoryInfo diSource = new DirectoryInfo(source);

DirectoryInfo diDestination = new DirectoryInfo(destination);

FileInfo[] fiSource = diSource.GetFiles();

for (int i = 0; i < fiSource.Length; i++)

STARTUPINFO si = new STARTUPINFO();

PROCESS_INFORMATION pi = new PROCESS_INFORMATION();

string fileInPath = source + "\\" + fiSource[i].Name;

// Опции программы mystem

// n - построчный режим; каждое слово печатается на новой строке

// l - не печатать исходные словоформы, только леммы и граммемы

// i - печатать грамматическую информацию

string options = " -nli ";

string fileOutPath = destination + "\\" + "norm_" + fiSource[i].Name;

CreateProcess("mystem.exe", "mystem.exe " + fileInPath + options + fileOutPath,

IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref si, out pi);

}

}

}

}

Файл CrossValidation.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace JSM_VS

{

class CrossValidator

{

/// <summary>

/// Вычисление метрик эффективности анализа

/// </summary>

/// <param name="resForPlusTestCollect"></param>

/// <param name="resForMinusTestCollect"></param>

/// <param name="koeff"></param>

static void CalcKoeff(char[] resForPlusTestCollect, char[] resForMinusTestCollect, ref EffectMeasure koeff)

{

int TP = 0, FP = 0, TN = 0, FN = 0;

for (int i = 0; i < resForPlusTestCollect.Length; i++)

{

if (resForPlusTestCollect[i] == '+')

TP++;

else if (resForPlusTestCollect[i] == '-')

FP++;

}

for (int i = 0; i < resForMinusTestCollect.Length; i++)

{

if (resForMinusTestCollect[i] == '-')

TN++;

else if (resForMinusTestCollect[i] == '+')

FN++;

}

koeff.precission = (double)TP / (double)(TP + FP);

koeff.recall = (double)TP / (double)(TP + FN);

koeff.accuracy = (double)(TP + TN) / (double)(TP + TN + FN + FP);

koeff.f1_measure = 2 * koeff.precission * koeff.recall / (koeff.precission + koeff.recall);

}

/// <summary>

/// Запуск процедуры кросс-валидации

/// </summary>

/// <param name="plusSamples"></param>

/// <param name="minusSamples"></param>

/// <param name="averAffectMeasure"></param>

/// <param name="n"></param>

/// <param name="imbalance"></param>

public void ProcessTexts(TextInfo[] plusSamples, TextInfo[] minusSamples,

ref EffectMeasure averAffectMeasure, int n, double imbalance, int typeFuncResolution)

{

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

{

// Тестовая коллекция

TextInfo[] plusTestCollection = null;

TextInfo[] minusTestCollection = null;

// Обучающая коллекция

TextInfo[] plusTrainingCollection = null;

TextInfo[] minusTrainingCollection = null;

int sizePlusBlock = plusSamples.Length / n;

int sizeMinusBlock = minusSamples.Length / n;

if (plusSamples.Length - (i + 1) * sizePlusBlock >= sizePlusBlock &&

minusSamples.Length - (i + 1) * sizeMinusBlock >= sizeMinusBlock)

{

// Инициализация тестовой коллекции

plusTestCollection = new TextInfo[sizePlusBlock];

minusTestCollection = new TextInfo[sizeMinusBlock];

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

plusTestCollection[j] = plusSamples[i * sizePlusBlock + j];

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

minusTestCollection[j] = minusSamples[i * sizeMinusBlock + j];

// Инициализация обучающей коллекции

plusTrainingCollection = new TextInfo[plusSamples.Length - sizePlusBlock];

minusTrainingCollection = new TextInfo[minusSamples.Length - sizeMinusBlock];

for (int j = 0; j < i * sizePlusBlock; j++)

plusTrainingCollection[j] = plusSamples[j];

for (int j = (i + 1) * sizePlusBlock; j < plusSamples.Length; j++)

plusTrainingCollection[j - sizePlusBlock] = plusSamples[j];

for (int j = 0; j < i * sizeMinusBlock; j++)

minusTrainingCollection[j] = minusSamples[j];

for (int j = (i + 1) * sizeMinusBlock; j < minusSamples.Length; j++)

minusTrainingCollection[j - sizeMinusBlock] = minusSamples[j];

}

else

{

// Инициализация тестовой коллекции

plusTestCollection = new TextInfo[plusSamples.Length - i * sizePlusBlock];

minusTestCollection = new TextInfo[minusSamples.Length - i * sizeMinusBlock];

for (int j = 0; j < plusSamples.Length - i * sizePlusBlock; j++)

plusTestCollection[j] = plusSamples[i * sizePlusBlock + j];

for (int j = 0; j < minusSamples.Length - i * sizeMinusBlock; j++)

minusTestCollection[j] = minusSamples[i * sizeMinusBlock + j];

// Инициализация обучающей коллекции

plusTrainingCollection = new TextInfo[i * sizePlusBlock];

minusTrainingCollection = new TextInfo[i * sizeMinusBlock];

for (int j = 0; j < i * sizePlusBlock; j++)

plusTrainingCollection[j] = plusSamples[j];

for (int j = 0; j < i * sizeMinusBlock; j++)

minusTrainingCollection[j] = minusSamples[j];

// Список гипотез

List<Hypothesis> plusHypotheses = new List<Hypothesis>();

List<Hypothesis> minusHypotheses = new List<Hypothesis>();

JsmProcessor jp = new JsmProcessor();

// Индукция

jp.Induction(plusHypotheses, plusTrainingCollection);

jp.Induction(minusHypotheses, minusTrainingCollection);

List<Hypothesis>[] coincidedHypForPlusSamples;

List<Hypothesis>[] coincidedHypForMinusSamples;

// Аналогия

jp.Analogy(plusHypotheses, minusHypotheses, plusTestCollection, out coincidedHypForPlusSamples);

jp.Analogy(plusHypotheses, minusHypotheses, minusTestCollection, out coincidedHypForMinusSamples);

// Обработка примеров классификатором

// '+' - пример положительный

// '-' - пример отрицательный

// 'n' - класс примера не определен

char[] resForPlusTestCollection = new char[plusTestCollection.Length];

char[] resForMinusTestCollection = new char[minusTestCollection.Length];

jp.Classification(resForPlusTestCollection, coincidedHypForPlusSamples, imbalance, typeFuncResolution);

jp.Classification(resForMinusTestCollection, coincidedHypForMinusSamples, imbalance, typeFuncResolution);

EffectMeasure koeff = new EffectMeasure();

CalcKoeff(resForPlusTestCollection, resForMinusTestCollection, ref koeff);

if (i < n)

{

averAffectMeasure.precission += koeff.precission;

averAffectMeasure.recall += koeff.recall;

averAffectMeasure.f1_measure += koeff.f1_measure;

averAffectMeasure.accuracy += koeff.accuracy;

}

if (i == n - 1)

{

averAffectMeasure.precission = averAffectMeasure.precission / n;

averAffectMeasure.recall = averAffectMeasure.recall / n;

averAffectMeasure.f1_measure = averAffectMeasure.f1_measure / n;

averAffectMeasure.accuracy = averAffectMeasure.accuracy / n;

}

}

}

}

}

Файл JsmProcessor.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace JSM_VS

{

class JsmProcessor

{

/// <summary>

/// Функция разрешения конфликтов гипотез (количество гипотез)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution(List<Hypothesis> coincidedHyp, double k)

{

int countPlusHyp = 0, countMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusHyp++;

else

countMinusHyp++;

double res = (double)countPlusHyp - k * (double)countMinusHyp;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

}

/// <summary>

/// Функция разрешения конфликтов гипотез (суммарное количество характеристик во всех гипотезах)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution2(List<Hypothesis> coincidedHyp, double k)

{

int countPlusValue = 0, countMinusValue = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusValue += coincidedHyp[i].setValues.Count;

else

countMinusValue += coincidedHyp[i].setValues.Count;

double res = countPlusValue - k * countMinusValue;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

}

/// <summary>

/// Функция разрешения конфликтов гипотез (суммарное количество родителей всех гипотез)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution3(List<Hypothesis> coincidedHyp, double k)

{

int countPlusParent = 0, countMinusParent = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusParent += coincidedHyp[i].setParents.Count;

else

countMinusParent += coincidedHyp[i].setParents.Count;

double res = countPlusParent - k * countMinusParent;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

}

/// <summary>

/// Функция разрешения конфликтов гипотез (произведение количества характеристик на количество родителей)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution4(List<Hypothesis> coincidedHyp, double k)

{

int countPlusHyp = 0, countMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

else

countMinusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

double res = countPlusHyp - k * countMinusHyp;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

}

/// <summary>

/// Функция разрешения конфликтов гипотез (отношение произведения количества характеристик на количество родителей

/// к общему количеству характеристик в совпавших с текстом гипотезах одного класса)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution5(List<Hypothesis> coincidedHyp, double k)

{

int commonNumValuesPlusHyp = 0, commonNumValuesMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

commonNumValuesPlusHyp += coincidedHyp[i].setValues.Count;

else

commonNumValuesMinusHyp += coincidedHyp[i].setValues.Count;

int countPlusHyp = 0, countMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

else

countMinusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

double res = (double)countPlusHyp / (double)commonNumValuesPlusHyp -

k * (double)countMinusHyp / (double)commonNumValuesMinusHyp;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

}

/// <summary>

/// Функция разрешения конфликтов гипотез (отношение произведения количества характеристик на количество родителей

/// к общему количеству родителей в совпавших с текстом гипотезах одного класса)

/// </summary>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <returns></returns>

static char ConflictResolution6(List<Hypothesis> coincidedHyp, double k)

{

int commonNumParentsPlusHyp = 0, commonNumParentsMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

commonNumParentsPlusHyp += coincidedHyp[i].setParents.Count;

else

commonNumParentsMinusHyp += coincidedHyp[i].setParents.Count;

int countPlusHyp = 0, countMinusHyp = 0;

for (int i = 0; i < coincidedHyp.Count; i++)

if (coincidedHyp[i].type == '+')

countPlusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

else

countMinusHyp += coincidedHyp[i].setValues.Count * coincidedHyp[i].setParents.Count;

double res = (double)countPlusHyp / (double)commonNumParentsPlusHyp

k * (double)countMinusHyp / (double)commonNumParentsMinusHyp;

if (res > 0)

return '+';

else if (res < 0)

return '-';

else

return 'n';

/// <summary>

/// Функция классификации текстов

/// </summary>

/// <param name="res"></param>

/// <param name="coincidedHyp"></param>

/// <param name="k"></param>

/// <param name="typeFuncResolution"></param>

public void Classification(char[] res, List<Hypothesis>[] coincidedHyp, double k, int typeFuncResolution)

{

for (int i = 0; i < coincidedHyp.Length; i++)

switch (typeFuncResolution)

{

case 1:

ConflictResolution(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

case 2:

ConflictResolution2(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

case 3:

ConflictResolution3(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

case 4:

ConflictResolution(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

case 5:

ConflictResolution(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

case 6:

ConflictResolution(coincidedHyp[i], k);

res[i] = ConflictResolution(coincidedHyp[i], k);

break;

}

}

/// <summary>

/// Процедура индукции

/// </summary>

/// <param name="hypotheses"></param>

/// <param name="setSamples"></param>

public void Induction(List<Hypothesis> hypotheses, TextInfo[] setSamples)

{

for (int i = 0; i < setSamples.Length; i++)

{

int hypCount1 = hypotheses.Count;

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

{

// Находим пересечение очередного объекта с текущей гипотезой

HashSet<int> newIntersection = new HashSet<int>();

newIntersection.UnionWith(setSamples[i].setValues);

newIntersection.IntersectWith(hypotheses[j].setValues);

// Если пересечение совпадает с текущей гипотезой,

// то добавляем объект в список родителей гипотезы

if (hypotheses[j].setValues.Count == newIntersection.Count &&

hypotheses[j].setValues.SetEquals(newIntersection))

{

hypotheses[j].setParents.Add(i);

}

// иначе проверяем в какие ещё гипотезы входит найденное пересечение// для определения всех родителей новой гипотезы

else

{

Hypothesis newHyp = new Hypothesis();

newHyp.setValues = new HashSet<int>();

newHyp.setValues.UnionWith(newIntersection);

newHyp.setParents = new HashSet<int>();

newHyp.setParents.UnionWith(hypotheses[j].setParents);

newHyp.setParents.Add(i);

newHyp.type = hypotheses[j].type;

int hypCount2 = hypotheses.Count;

int k = 0;

while (k < hypCount2)

{

if (hypotheses[k].setValues.Count == newHyp.setValues.Count &&

hypotheses[k].setValues.SetEquals(newHyp.setValues))

{

hypotheses[k].setParents.UnionWith(newHyp.setParents);

break;

}

else

{

if (hypotheses[k].setValues.SetEquals(newHyp.setValues))

newHyp.setParents.UnionWith(hypotheses[k].setParents);

}

k++;

}

if (k == hypCount2)

hypotheses.Add(newHyp);

}

}

int q = 0;

while (q < i)

{

HashSet<int> newIntersection = new HashSet<int>();

newIntersection.UnionWith(setSamples[i].setValues);

newIntersection.IntersectWith(setSamples[q].setValues);

if (newIntersection.Count == setSamples[i].setValues.Count &&

setSamples[i].setValues.SetEquals(newIntersection))

{

break;

}

q++;

}

if (q == i)

{

Hypothesis newHyp = new Hypothesis();

newHyp.setValues = new HashSet<int>();

newHyp.setValues.UnionWith(setSamples[i].setValues);

newHyp.setParents = new HashSet<int>();

newHyp.setParents.Add(i);

newHyp.type = setSamples[i].type;

hypotheses.Add(newHyp);

}

}

}

/// <summary>

/// Процедура аналогии

/// </summary>

/// <param name="plusHypotheses"></param>

/// <param name="minusHypotheses"></param>

/// <param name="setSamples"></param>

/// <param name="coincidedHyp"></param>

public void Analogy(List<Hypothesis> plusHypotheses, List<Hypothesis> minusHypotheses,

TextInfo[] setSamples, out List<Hypothesis>[] coincidedHyp)

{

coincidedHyp = new List<Hypothesis>[setSamples.Length];

for (int i = 0; i < coincidedHyp.Length; i++)

coincidedHyp[i] = new List<Hypothesis>();

for (int i = 0; i < setSamples.Length; i++)

{

// Поиск совпадений с положительными гипотезами

for (int j = 0; j < plusHypotheses.Count; j++)

{

HashSet<int> intersection = new HashSet<int>();

intersection.UnionWith(setSamples[i].setValues);

intersection.IntersectWith(plusHypotheses[j].setValues);

if (intersection.SetEquals(plusHypotheses[j].setValues))

coincidedHyp[i].Add(plusHypotheses[j]);

}

// Поиск совпадений с отрицательными гипотезами

for (int j = 0; j < minusHypotheses.Count; j++)

{

HashSet<int> intersection = new HashSet<int>();

intersection.UnionWith(setSamples[i].setValues);

intersection.IntersectWith(minusHypotheses[j].setValues);

if (intersection.SetEquals(minusHypotheses[j].setValues))

coincidedHyp[i].Add(minusHypotheses[j]);

}

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


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

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

    курсовая работа [1010,4 K], добавлен 10.08.2014

  • Обыкновенное дифференциальное уравнение первого порядка. Задача Коши, суть метода Рунге-Кутта. Выбор среды разработки. Программная реализация метода Рунге-Кутта 4-го порядка. Определение порядка точности метода. Применение языка программирования C++.

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

  • Назначение и классификация методов поисковой оптимизации. Эффективность поискового метода. Методы поиска нулевого порядка: исходные данные, условия, недостатки и применение. Структура градиентного метода поиска. Основная идея метода наискорейшего спуска.

    лекция [137,8 K], добавлен 04.03.2009

  • Сущность и описание симплекс-метода и улучшенного симплекс-метода (метода обратной матрицы), преимущества и недостатки их применения в линейном прогаммировании. Листинг и блок-схема программы на языке Turbo Pascal для решения математической задачи.

    курсовая работа [45,0 K], добавлен 30.03.2009

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

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

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

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

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

    курсовая работа [142,9 K], добавлен 24.10.2012

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

    курсовая работа [64,6 K], добавлен 07.05.2011

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

    курсовая работа [249,8 K], добавлен 25.09.2013

  • Описание метода сжатия информации на основе двоичных кодирующих деревьев Хаффмана. Среда разработки Delphi версии 7.0. Понятия объектно-ориентированного программирования. Программа, разработанная в Delphi. Реализация на Delphi метода кодирования Хаффмана.

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

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