Выпускная квалификационная работа бакалавра. Тема: разработка проблемно-инвариантного ядра для решения задач оптимизации в среде pspice.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Санкт
-
Петербургский государственный электротехнический университет

ЛЭТИ» им. В.И.Ульянова (Ленина)»

(СПбГЭТУ

ЛЭТИ
»
)


Направление

09.03.01


Информатика и вычислительная техника

Профиль

Системы автоматизированного проектирования

Факультет

КТИ

Кафедра

САПР

К защите допустить


Зав. кафедрой


Рыжов Н.Г.



ВЫПУСКНАЯ КВАЛИФИКАЦ
ИОННАЯ РАБОТА

БАКАЛАВРА


Тема:
РАЗРАБОТКА ПРОБЛЕМНО
-
ИНВАРИАНТНОГО ЯДРА
ДЛЯ
РЕШЕНИЯ ЗАДА" ОПТИМИ
ЗАЦИИ В СРЕДЕ
PSPICE




Студент




Духовников Д.С.



подпись



Руководитель

д.т.н., профессор



Дмитревич Г.Д.


(Уч. степень, уч
. звание)

подпись



Консультанты

к.
т.н., профессор



Лячек Ю.Т.


(Уч. степень, уч
. звание)

подпись




к.т.н., доцент



Фомин В.И.


(Уч. степень, уч
. звание)

подпись







Санкт
-
Петербург

2017

2


ЗАДАНИЕ

НА ВЫПУСКНУЮ КВАЛИФИ
КАЦИОННУЮ РАБОТУ


Утверждаю


Зав. кафедрой САПР


____________ Рыжов Н.Г.


___»______________2P___ г.

Студент

Духовников Д.С.


Группа

3301

Тема работы:
Разработка проблемно
-
инвариантного ядра для решения задач
оптимизации в среде
PSpice
.

Место выполнения ВКР: СПБГЭТУ ЛЭТИ», кафедра САПР.

Исходные данные (технические требования): разработать

проблемно
инвариантное ядро , являющееся надстройкой к вычислительным пакетам
САПР
PSpice
, представляющее собой алгоритмы оптимизации, способные по
своей устойчивости и быстродействию заменить модуль
PSpice

Optimizer
.

Содержание ВКР:
архитектурные
решения оптимального проектирования
,
математическое и алгоритмическое

обеспечение проблемно
-
инвариантного
ядра для САПР
PSpice
,
программное обеспечение ядра
DDCore
, решение задач
оптимального проектирования
.

Перечень отчетных материалов: пояснительная зап
иска, иллюстративный
материал, презентация.

Дополнительные разделы: разработка и стандартизация.


Дата выдачи задания

Дата представления ВКР к защите

 17 »

октября

2P17 г.

___»______________2P___ г.



Студент




Духовников Д
.С.



подпись



Руководитель

д.т.н., профессор



Дмитревич Г.Д.


(Уч. степень, уч
. звание)

подпись



Руководитель

к
.т.н., профессор



Лячек Ю.Т.


(Уч. степень, уч
. звание)

подпись



3


КАЛЕНДАРНЫЙ ПЛАН ВЫП
ОЛНЕНИЯ

ВЫПУСКНОЙ КВАЛИФИКАЦ
ИОННОЙ РАБОТЫ


Утверждаю


Зав.
кафедрой САПР


____________ Рыжов Н.Г.


___»______________2P___ г.


Студ
ент

Духовников Д.С.


Группа

3301

Тема работы:
Разработка проблемно
-
инвариантного ядра для решения задач
оптимизации в среде
PSpice
.



п/п

Наименование работ

Срок
выполнения

1

Обзор литературы по теме работы

02.02


03.03

2

Архитектурные решения оптимального
проектирования

01.03


10.03

3

М
атематическое и алгоритмическое

обеспечение
проблемно
-
инвариантного ядра для САПР
PSpice

06.03


30.03

4

Программное обеспечение ядра
DDCore

16.03


07.04

5

Р
азработка интерфейса проблемно
-
инвариантного
ядра

17.04


28.04

6


Решение задач оптимального проектирования

24.04


05.05

7


Разработка и стандартизация программных средств

17.05


22.05

8

Оформление пояснительной записки

16.05



22.05

9

Оформление иллюстративного материала

23.05


29.05


4


Студент




Духовников Д.С.



подпись



Руководитель

д.т.н., профессор



Дмитревич Г.Д.


(Уч. степень, уч. звание)

подпись



Консультант

к.т.н., профессор



Лячек Ю.Т.


(Уч. степень, уч.
звание)

подпись




5


РЕФЕРАТ

Пояснительная записка
67

стр.,
31

рис.,
7

табл.,
16

ист.,
1

прил.

КЛИЕНТСКОЕ ПРИЛОЖЕНИ
Е, ОПТИМАЛЬНОЕ
ПРОЕКТИРОВАНИЕ, САПР
, СИСТЕМА СХЕМОТЕХНИ
"ЕСКОГО
ПРОЕКТИРОВАНИЯ, АЛГО
РИТМЫ ОПТИМИЗАЦИИ,
PSPICE
,
АРХИТЕКТУРА,
ПРОБЛЕМНО
-
ИНВАРИАНТН
ОЕ ЯДРО.

Объектом разработки является
проблемно
-
инвариантное ядро
оптимизации характеристик радиоэлектронных схем.

Цель работы


разработка проблемно
-
инвариантного ядра для решения
задач оптимизации в среде
PSpice
.

Данная работа содержи
т

архитектурные решения
и задачи

оптимального
проектирования

в САПР, анализ взаимодействия

модулей целевой программы
PSpice
,
положительные особенности данной системы и ее недостатки,
модифи
цированную
архитектуры компании
MicroSim

расширяющая

программные во
зможности продукта
PSpice
.
Также она включает в себя
сравнение двух платформенно
-
независимых языков программирования
Java

и
C
#.

Разработка программного
обеспечения

потребовала рассмотрения

математического и алгоритмического
обеспечения

проблемно
-
инвариантн
ого
ядра
DDCore
. Проводилось

исследование большого набора методов;

выбрано

построение программной логики ядра на двухэтапной стратегии оптимизации,
использована связка генетический алгоритм с методом БФГШ; при
оптимизации большого числа параметров проектируемой схемы выполн
ялась

более устойчивая связка генетического алгоритма с
методом Флетчера
-
Ривса.

В рамках выпускной квалифик
ационной работы было разработано

проблемно
-
инвариантное ядро, реализованное
на языке программирования
C
#
, интегрированного в состав САПР
PSpice

для решения задач оптимизации
схемотехнического проектировани
я
.

6


ABSTRACT

Finl qulifyin work’s min ojctiv is dvlopin 
problem
-
invariant
kernel for solving optimization problems in the PSpice environment
. It’s ncssry
to construct a model of
a principle scheme
, which reflects the real processes in the
fr
equency domain
.
which represents the electronic circuit. The
principle scheme

consists of resistors,
capacitors, inductors, controlled sources, operational amplifiers and other
multipoles. B
sd on th dvlopd modl, it’s ncssry to implmnt th softwr
package, elements of which could be distributed on different computers. This system
shouldn’t dpnd on  dvlopmnt nvironmnt.



7


СОДЕРЖАНИЕ

ВВЕДЕНИЕ

................................
................................
................................
..............

9

1.

АРХИТЕКТУРНЫЕ РЕШЕНИЯ ОПТИМАЛЬНОГО
ПРОЕКТИРОВАНИЯ

................................
................................
...........................

11

1.1.

Традиционные архитектуры построения САПР

................................
...

11

1.2.

Архитектура
PSpice

................................
................................
..................

13

1.3.

Модифицированная архитектура
PSpice

................................
................

15

1.4.

Выводы

................................
................................
................................
......

16

2.

РАЗРАБОТКА ПРОБЛЕМНО
-
ИНВАРИАНТНОГО ЯДРА
ОПТМИМИЗАЦИИ

................................
................................
..............................

17

2.1.

Выбор стратегии оптимального поиска

................................
.................

17

2.2.

Математическое и алгоритмическое обеспечение системы
DDCore

..

17

2.2.1.

Модификация генетического алгоритма

................................
.........

17

2.2.2.

Класс методов переменной метрики

................................
................

21

2.2.3.

Класс методов сопряженных градиентов

................................
........

24

2.3.

Программное обеспечение ядра
DDCore

................................
...............

26

2.3.1.

Лингвистическое обеспечение ядра

................................
.................

26

2.3.2.

Реализация проектных процедур

................................
......................

28

2.4.

Интеграция ядра
DDCore

с пакетными модулями
PSpice

....................

34

2.5.

Описание пользовательского интерфей
са

................................
.............

37

2.6.

Выводы

................................
................................
................................
......

43

3.

ПРИМЕНЕНИЕ ПРОБЛЕМНО
-
ИНВАРИАНТНОГО ЯДРА ДЛЯ
РЕШЕНИЯ ЗАДА" ОПТИМИЗАЦИИ

................................
...............................

44

3.1.

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

44

3.2.

Решение задач оптимального проектирования

................................
.....

49

3.3.

Выводы

................................
................................
................................
......

53

4.

РАЗРАБОТКА И СТАНДАРТИЗАЦИЯ ПРОГРАММНЫХ СРЕДСТВ

..

54

4.1.

Планирование работ

................................
................................
.................

54

4.2.

Затраты на выполнение и внедрение проекта

................................
.......

59

ЗАКЛЮ"ЕНИЕ

................................
................................
................................
.....

63

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

................................
...........

66

ПРИЛОЖЕНИЕ

А
.
Код

программы

................................
................................
....

68


8


ОПРЕДЕЛЕНИЯ, ОБОЗНА"
ЕНИЯ И СОКРАЩЕНИЯ

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

WPF



Windows

Presentation

Foundation

ВКР


выпускная квалификационная работа

ГА


генетический алгоритм

ЕСКК


единая система классификации и кодирования технико
-
экономической и социальной информации

КОП


критерий окончания поиска

МО


метод оптимизации

ОКП


общероссийский классификатор продукции

ПК


персональный компьютер

ПО


программное обеспечение

ПС


программное средство

САПР


система автоматизированного проектирования

СБИС


сверхбольшая интегральная схема

СВТ


средство вычислительной техники




частотная характеристика

ЭВМ


электронн
о
-
вычислительная машина

9


ВВЕДЕНИЕ

Несмотря на наличие на рынке современных интегрированных САПР
РЭА класса
Altium

Designer
(
программно
-
аппаратный комплекс для
построения новейших радиоэлектронных устройств на базе современных
схемных компонентах, включая п
рограммируемые логические интегральные
схемы и системы на кристалле
),
на

предприятиях, разрабатывающих
радиоэлектронную аппаратуру, большой популярностью пользуются более
ранние и более простые версии САПР РЭА. К таким системам относятся
пакеты
DesignLab

и

OrCAD
, использующие модуль анализа
PSpice
.

Однако эти системы не имеют развитого диалогового интерфейса,
позволяющего прово
дить сравнение альтернативных не
доминируемых
проектных решений. Указанные системы не позволяют учитывать сложный
векторный характе
р целевой функции, обусловленный множественностью
предъявляемых к РЭС требований, неопределенностью условий их
функционирования и рядом других факторов. В
работе

предлагается метод
построения подсистемы оптимального проектирования

на основе модуля
анализа
PSpice
.

Для достижения требуемых технических характеристик
схемы в
процессе проектирования в системе
PSpice

имеется возможность выполнить
параметрическую оптимизацию (а
втоматизированный подбор параметров
)

с
помощью программы PSpic Optimizr.


Однако его п
рименение имеет следующие недостатки:



усложненный алгоритм задания варьируемых параметров и
целевых функций
;



ограниченны
й набор алгоритмов оптимизации;



закрытость модуля
Optimizer

для подключения внешней
библиотеки методов оптимизации.

Устранить перечисл
енные недостатки и расширить в
озможности
оптимизации
характеристик схем можно на основе создания внешнего
10


интерфейсно
-
управляющего модуля оптимизации
DDCore
, интегрированного
в структуру системы
PSpice
.

При разработке модуля оптимизации
DDCore

необходимо учитывать
следующие требования:



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



возможность подключения библиотеки методов оптимизации и
выбора наилучшего метода;



модификация

варьируемых параметров схемы в файле исходных
данных для модуля

PSpice
;



чтение результатов моделирования из выходного файла модуля
PSpice

и вычисление целевой функции;



организация итерационного процесса параметрической
оптимизации с периодическим запуском

модуля анализа
PSpice
.

Таким образом п
роблемно
-
инвариантное ядро

DDCore

является
надстройкой к вычислительным пакетам
OrCAD
, которые предоставляют
простой интуитивный интерфейс для задания характеристик схемы и их
анализа, с помощью которых возможно полу
чить необходимые данные для
последующей оптимизации схемы.

В задачи работы входит:



Анализ систем зарубежного и отечественного схемотехнического
проектирования;



Представить архитектурные решения расширяющие возможности
САПР

PSpice
;



Разработка ядра,
выполняющего оптимизацию различных
функций, по заданному критерию оптимальности;



Рассмотреть решение типовых задач оптимального
проектирования.

11


1.

АРХИТЕКТУРНЫЕ РЕШЕНИ
Я ОПТИМАЬНОГО
ПРОЕКТИРОВАНИЯ

1.1.

Традиционные архитектуры построения САПР

В современной эпохе т
ехнического прогресса существует довольно
большое количество различных систем, которые обеспечивают сквозное
проектирование радиоэлектронной аппаратуры. Наиболее популярное
распространение среди создателей радиоэлектронной техники получила
модульная САПР
D
esignLab

компании
MicroSim
, ядро которой реализует
программа
PSpice
, представляющая собой наиболее распространенную
версию программы
Spice
. Оказавшейся весьма успешной и с того времени
постоянно развивающейся и бесспорно ставшим программным средством №1
мо
делирования аналоговых устройств. Установленные в ней точные
модификации полупроводниковых устройств применяются во множестве
подобных программ, а перечни описания схем в формате
Spice

используют
большинство пакетов САПР. Первая модификация САПР
PSpice
, со
гласно
заказу

IBM

PC
, была

сформирована в 1984 году компанией
MicroSim
. Эта и
дальнейшие версии применяют те же методы, алгоритмы и формат описания
выходных и входных данных. В 2PPS году концепция
DesignLab

введена в
структуру пакета
OrCAD
. Такие программн
ые средства как
, DesignCenter
,

DsinL и PSpic

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

Концепция
DesignLab

снабжена диалоговым редактором схем
радиоэлектронных устройств, который в то же вре
мя является оболочкой,
управляющей запуском остальных программных модулей в абсолютно всех
стадиях деятельности с системой. Программа предоставляет возможность
осуществлять вычисление систем радиоэлектронных приборов по
переменному и постоянному току, а та
кже спектральные исследования в
необходимой области, прогнозирование переходных воздействий в
12


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

Прогнозирование цифровы
х и аналогово
-
цифровых приборов
производится на уровне логического взаимодействия с присоединением
цифро
-
аналоговых и аналогово
-
цифровых диалоговых интерфейсов с целью
предоставления взаимосвязи цифровых и аналоговых элементов управления.
Также в системах
способно осуществляться параметрическая
самооптимизация аналогово
-
цифровых приборов согласно установленным
ограничениям при присутствии нелинейных критериев на характеристики
варьируемых частей.

Вышесказанные САПР обладают в своем составе графическим
редак
тором печатных плат, который в независимом режиме принимает данные
о соединениях формата
P
-
CAD
, а в составе структуры


воспринимает
информацию также, как и графический редактор принципиальных схем.
Элементы радиоэлектронных устройств автоматом, либо ручным способом
помещаются в одной, либо двух гранях оптимальной платы, уже после чего
вероятна нам
етка многослойных сочетаний в механическом либо диалоговом
порядке. Согласно итогам трассировки, формируются инструктивные данные
с целью изготовления фотошаблонов и сверловочных станков с числовым
программным управлением. Также предоставляется транспортир
овка
сведений в САПР
AutoCAD

с целью выпуска конструкторской документации.

С программным средством
DesignLab

сопровождаются множественные
библиотеки графических знаков компонентов радиоэлектронных устройств и
базы сведений моделей компонентов принципиальны
х схем производства
разных компаний США, Японии и Западной Европы. Помимо этого,
превалирующим плюсом является возможность дополнения библиотек.

Для более глубокого понимания разберем классическую структуру
схемотехнической САПР
DesignLab

и особенности ее
использования.

13



Рисунок 1.1 Традиционная архитектура САПР
DesignLab

Традиционная архитектура программы
DesignLab

изображена на
рисунке 1.1, содержащая единичные подсистемы, прописанные в
процедурных либо объектно
-
направленных стилях программирования,
обла
дающая мощными средствами при работе с различными типами данных
(перечисления, очереди, графы, деревья, списки и т.д.). Взаимообмен
информацией среди подсистем происходит при взаимодействии с двоичными
и текстовыми файлами.

1.2.

Архитектура
PSpice

Комплект пра
ктических программных средств
OrCAD

рассчитанный с
целью автоматизации хода проектирования электронных устройств, который
предоставляет возможность осуществить прогнозирование переходных
воздействий, продумать частотные и шумовые свойства аналогового,
14


цифр
ового или гибридного проборов, установленного принципиальной
схемой, улучшить характеристики прибора в согласовании с установленным
критерием оптимальности, создать принципиальную плату. Помимо
упомянутых способностей, заключительная модификация пакета (
Or
CAD

9.
2
)

содержит новейшие способы проектирования приборов с использованием
техпроцессов
FPGA
/
CPLD

интегральных схем; дает возможность
разрабатывать оборудование совместно с программными средствами
трассировки и размещения от компаний
-
производителей разраб
отки схем на
кристалле
.

В таблице
1.1

представлены основные программы, входящие в состав
системы
PSpice

[2]
.


Таблица
1
.1 Назначение отдельных программ, входящих в состав пакета
PSpice


Классическая

структура

концепции

САПР

PSpice

содержит

ряд

подсистем
,
любая

из
которых

создана

согласно

модульному

принципу
.
Информативный

взаимообмен

среди

подсистем

осуществляется

с

поддержкой

текстовых

и

бинарных

файлов
.
Требование

подсистем

выполняется

из

интерфейсно
-
распоряжающейся

подсистемы
,
значимость

каковой

осуществляет

программный

модуль
Schematics

или

OrCAD

Capture
.


15


На рисунке 1.2 представлены модули системы
PSpice

и связи между
ними.


Рисунок
1.2
Состав модулей
PSpice

Для

получения

технических данных
проектируемой

принципиальной
схемы

в

ходе

проектирования

в

САПР

DesignLab

существует

вероятность

осуществить

параметрическую

оптимизацию

(
автоматический

подбор

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

PSpice

Optimizer
.

1.3.

Модифицированная архитектура
PSpice

Как о
говаривалось ранее пакет прикладных программ
PSpice

обладает
рядом преимуществ по заданию и моделированию принципиальной схемы, но
также имеет серьезные недостатки при оптимизации частотных характеристик
радиоэлектронных схем, таким образом необходимо испо
льзовать внешние
модули оптимизации исключив модуль
PSpice

Optimizer
.
Предлагаемая
модификация архитектуры программных пакетов
PSpice
представлена на
рисунке 1.S.

16



Рисунок 1.S. Архитектура модифицированной версии системы
DesignLab

1.4.

Выводы

На основе проанализированных данных была рассмотрена традиционная
архитектура построения схемотехнических САПР. Выделены основные

преимущества программного обеспечения
PSpice
, такие как удобное задание
принципиальной схемы, мощные средства

моделирования и простой механизм
передачи данных между модулями системы.
Подведен результат о
несостоятельности модуля оптимизации
PSpice

Optimizer
. Предложена
модифи
цированная архитектура пакета программы с целью устранить
недостатки оптимального проекти
рования системы
PSpice
.

17


2.

РАЗРАБОТКА ПРОБЛЕМНО
-
ИНВАРИАНТНОГО ЯДРА
ОПТМИМИЗАЦИИ

2.1.

Выбор стратегии оптимального поиска

В процессе выбора оптимальной стратегии минимизации было
проведено исследование широкого набора методов оптимизации, с учетом
чего, предложена

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

На первоначальном шаге производится зондирование пространства
области поиска методом модифицированного генетического алгоритма с
целью получения вектора решений, лежащего в некоторой области
глобального минимума.

На
втором этапе выполняется фиксация вектора параметров
проектируемой схемы, согласно критерию оптимальности. В качестве
классических алгоритмов оптимизации выбран класс методов переменной
метрики и сопряжённых градиентов.

2.2.

Математическое и алгоритмическое обе
спечение системы
DDCore

В этом параграфе дана характеристика методам, используемых при

реализации программного
обеспечения. В первую очередь целесообразно
начать с представления модификации генетического алгоритма,
предназначенного для зондирования области

поиска, в процессе которого
стоит обозначить итеративный процесс рассматриваемой процедуры, далее
описать классы методов, используемых для фиксации вектора целевых
параметров.

2.2.1.

Модификация генетического алгоритма

Генетический алгоритм (ГА)


это вероятност
ный эмпирический
алгоритм нулевого порядка. Он предполагает собою способ оптимизации,
базирующийся на правилах природного отбора и генетики

[
11, 26 с.
]
.

18


На рисунке 2.1 наглядно представлен итерационный процесс ГА:


Рисунок 2.1



Итерационный процесс

ГА

В
сем особям устанавливается в соотношение величина
приспособленности, которая характеризует значение целевой функции в точке
рассматриваемой области пространства
D
. Уже после инициализации
первоначальной популяции следует циклический метод эволюционного
раз
вития. Эволюционное развитие направлено на поиск более адаптивной
особи, иными словами на поиск потенциальной точки пространства
D

c

минимальной величиной исследуемой функции.

На стадии размножения количество особей популяции возрастает до
величины



ещё один метеопараметр генетической процедуры, чаще всего
(
см. рис 2.2
)
. Период размножения заключается в двух стадиях:
селекция двух особей из первой популяции и совершение скрещивания
(кроссовенга). При
скрещивании создаются особи отпрыски, наследующие
генетические данные от двух родителей.

19



Рисунок 2.2


Увеличение размера популяции

Мутация


беспорядочное модифицирование генетических данных
особей. На стадии мутации в популяцию записывается новейшие ге
нетические
данные (рис 2.S). Мутация, предназначенная с целью беспорядочного
зондирования потенциальной области и предотвращения ранней сходимости в
седловой точке поискового пространства.


Рисунок 2.S


Мутация особей в поисковом пространстве

На стадии природного отбора количество особей популяции уменьшают
вплоть до исходного количества
M

(рис. 2.4). В популяции сохраняют особи с
максимальной величиной приспособленности, данная процедура носит
название разрыв популяций, значение которой приним
ается из интервала
Например, при разрыве популяций равной

2P% особей из родительской
популяции переносится в новую без изменений, минуя этапы мутации,
размножения и скрещивания.


Рисунок 2.4


Сокращение особей

популяции до исходного

20


Критерием завершения алгоритма поиска считается вырождение
популяции, иными словами стяжка в
-
области точек поискового
пространства. Кроме этого критерием завершения алгоритма принимают
выполнения некоторого
количества итераций


количества шагов.

Принято, что в размножении принимают участие в наибольшей степени
приспособленные особи. Так, проверяются самые оптимальные области
поискового пространства. В окончательном результате популяция станет
сближаться к на
илучшему решению задачи.

Достоинство ГА заключается в том, то что он отыскивает приближенные
оптимальные решения за сравнительно непродолжительный период.

Каждой точке в поисковом пространстве параметров (фенотип)
устанавливается в соотношение бинарная пос
ледовательность определенной
длинны


хромосома. Отдельная хромосома состоит из набора генов.

Количество генов в хромосоме аналогично размерности
N

целевой
задачи. Отдельный ген служит с целью кодировки конкретной координаты
варьируемого вектора параметро
в.

Таким образом, можно также сказать, что
хромосома на рис. 2
.5

состоит из 4
-
х 1P
-
разрядных генов

[11, 32
c
.]
.


Рисунок 2.5


П
редставление вектора варьируемых параметров

При различных вариациях вышеописанных параметров рождаются
различные модификации ГА
, в рамках данной работы реализована
модификация классического ГА содержащая параметры, приведенные в
таблице 2.1.

21


Таблица 2.1


параметры ГА

Параметр

Значение

Размер популяции

250

Количество итерация

250

Вероятность скрещивания

0,7

Вероятность
мутации

0,1

Вероятность инверсии

0,05

Разрыв поколений

0,9

Тип кодирования

Целочисленное

Уплотнение сетки

1

Популяционный всплеск

1

Размер турнира

2

Тип скрещивания

Двухточечное

Количество разрядов кодирования

12

Следует отметить, что данная
модификация не является жестко
определенной и все параметры могут изменяться по желанию пользователя.

2.2.2.

Класс методов переменной метрики

Алгоритмы переменной метрики также носят название
квазиньютоновских или градиентных с большим шагом
[1]
. В данных методах

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

В отличие от метода сопряженных градиентов содержащий
корректир
ующий вектор


вводится в рассмотрение корректирующая матрица
называемая матрица переменной метрики.

В

отличие от
алгоритмов
Ньютона
не требует
ся

вычислять


и



1
, то есть
данный класс методов
свободен от
главного недостатка Ньютона
.

Ниже представлен о
бщий итерационный процесс квазиньютоновских
алгоритмов:

Начальный этап

Выбрать
,
,

установить

.

Основной этап

Шаг 1.

22


Построить квазиньютоновское направление

и корректирующую
матрицу


Построение квазиньютоновского направления:
.

Шаг 2
.

Найти

в заданном квазиньютоновком направлении, с помощью
метода одномерной оптимизации.

Перейти в новую точку:
, в
ыполнить

Шаг S
.

Проверить КОП: Если
,

то
(
последнее
)
, иначе
вернуться на

Шаг 1
.

Целесообразно ввести в рассмотрение графической представление
данного алгоритма в виде блок
-
схемы, представленной на рис. 2.6.


Рисунок 2.6


Блок
-
схема метода переменной метрики

23


В

таблице 2.2 приведены расчётные формулы корректирующей матрицы
:

Таблица 2.2


Расчётные формулы корректирующей матрицы

Метод

Рекуррентное соотношение

Дэвидона

Флетчера

Пауэлла


Бройдена

Флетчера

Шенно


Бройдена

Флетчера

Гольдфарба

Шенно


Мак
-
Кормика


Бройдена


Пирсона
-
2


Пирсона
-
3


Проекции Зойтендейка


В таблице приняты следующие обозначения:

,
,

.

где



антиградиент вектора варьируемых параметров

[10
, 31 c.
]
.

В зависимости от выбора формулы для расчёта корректирующей
матрицы алгоритм будет принимать тот или иной вид.

24


2.2.3.

Класс методов сопряженных
градиентов

Алгоритмы сопряжённых градиентов базируются на особенностях
векторов, сопряжённых сравнительно определенной квадратной матрицы.
Отличия в методах возведения концепций спуска, рождает различные
алгоритмы данного класса оптимизации, различия котор
ых зависит от выбора
формулы скалярного расчёта коэффициента поворота
.


Матрица Гессе
принимается в качестве матрицы сопряжений. Главная черта данного класса
методов в том, что концепцию сопряженных векторов создают
последовательно,
в ходе исполнения итераций, при этом, найденный на
каждой
k
-
ой стадии вектор устанавливает на данной итерации линию спуска.
В некоторых случаях, когда оптимизируются не квадратичные функции,
полученные направления, в итоге, прекращают являться
взаимносопря
женными, по этой причине через некоторое количество шагов
целесообразно направляющий вектор делать равным антиградиенту.

На рисунке 2.7 представлен общий поиск решения методами
сопряженных градиентов:


Рисунок 2.7


Общий поиск решения методом сопряженных градиентов

25


Ниже представлен общий итерационный процесс алгоритмов
сопряженных направлений:

Начальный

этап

Выбрать
ݔ
1
,



, установить

=
1
.

Основной этап

Шаг 1.

Найти





=
{

��������

(
ݕ

)
Б
при


=
1
Б

+
1
Б
2

+
1
Б
Е

��������

(
ݕ

)
+
ߚ


1



1
Б
при

остальных



В зависимости от выбранного метода оптимизации, для расчёта
коэффициента поворота целесообразно используется одна из представленных
формул:

Даниел

ߚ


1
=
(


)






1
(



1
)






1
,

ߛ


1
=






1
Б





=

grad
(
ݕ

)

Полак
-
Рибьер

ߚ


1
=
(


)



ߛ


1
(



1
)






1
=

(


)



ߛ


1




1

2

Флетчер
-
Ривс

ߚ


1
=





2







1

2

Диксон

ߚ


1
=






2



(



1
)






1

Шаг 2.

Найти
ߙ

,
используя метод одномерной
минимизации.

Шаг S.

Проверить КОП:

Если

��������

(
ݕ

)



, то остановиться,
иначе переход к
шагу 1
.

26


На рисунке 2.8, представлена блок
-
схема общего итерационного
процесса данного класса методов:


Рисунок 2.8


Итерационный процесс алгоритма сопря
женных градиентов

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

2.3.

Программное обеспечение ядра
DDCore

2.3.1.

Лингвистическое обеспечение ядра

Востребованное программное обеспечение разрабатывается
преимущественно на платформенно
-
независимых языках программирования
таких как Jv и C#, чьё достоинство очевидно и заключается в том, что
готовую программу, как веб
-
сервис, так и клиентское приложение, в
27


дальнейшем можно реализовать на других платформах и

языках
программирования.

Языки программирования C# и Jv являются наследниками языка С
и по большей части они созданы в условиях конкуренции, благодаря чему
характеризуются однозначным сходством, но при этом каждый из них имеет
отличительные особенност
и.

C# и Jv являются объектно
-
ориентированными языками, вследствие
этого программный код находится только внутри классов, а все классы без
родителя автоматически становятся наследниками класса Ojct. Также
данные языки имеют сходства в синтаксисе, наприм
ер, построение всех
ключевых конструкций (циклов, условных операторов и т.д.), использование
фигурных скобок для определения начала и конца блока кода и обязательность
создания нового объекта с помощью оператора nw.

Говоря о логике построения кода, подоб
ие языков C# и Jv выражается
в отсутствии указателей и непосредственного включения одного объекта в
другой в виде поля, иначе говоря, не считая наследования, единственным
способом связи между объектами является использование ссылок. Помимо
этого, оба язы
ка программирования имеют возможность перевода исходного
кода посредством автоматических средств в промежуточное стандартное
представление


байт
-
код, за счет которого достигается платформенная
независимость программы.

При решении поставленной задачи был
выбран язык программирования
C#, поскольку в нем присутствует один из способов реализации
полиморфизма


перегрузка операторов (oprnd) для бинарных и унарных
операций. Эта лексема дает возможность применения оператора с одним и тем
же именем к разным тип
ам данных, в то время как язык Jv не поддерживает
перегрузку операторов и для реализации аналогичной задачи необходимо
использовать громоздкие вложенные функции.


Также C# поддерживает понятие свойства



псевдополя класса, к
которому обеспечивается контр
олируемый доступ с помощью построения
28


методов для чтения и записи значения поля. Описание свойств осуществляется
посредством конструкций

и
. Язык Jv лишен подобной концепции,
хотя её реализация возможна с помощью традиционных методов, что
затрудн
яет читаемость
кода

[1]
.

Не менее значимым достоинством языка программирования C# является
более высокое быстродействие по сравнению с Jv. Помимо этого, C#
содержит значительное разнообразие библиотек, главным образом от
Windows, и оснащен качественной с
правочной службой MSDN.

Практическая реализация архитектуры

оптимального проектирования
, в
частности самого взаимодействия клиентского

приложения
осуществляется
при помощи средства Windows


Windows

presentation

foundation

(
WPF
), в
котором содержатся соотв
етствующие ресурсы и инструментальная
поддержка организации такого взаимодействия.

Компиляция кода на языке программирования C# осуществляется в
инструментальной среде разработки


Visual Studio 2017.

2.3.2.

Реализация проектных процедур

При реализации модулей ГА

и классических алгоритмов оптимизации
целесообразно использовать объектно
-
ориентированный стиль
программирования, с созданием необходимых классов, содержащих поля и
методы, чтобы обеспечить большую гибкость программного обеспечения и
возможно
сть его дальн
ейшего расширения.
Для представления программного
модуля ГА были созданы такие классы как:

Vector



класс, представляющий особь, отображающая вектор
варьируемых параметров поискового пространства;

PopulationData



класс, предназначенный для хранения набо
ра данных,
необходимых для вывода эволюционного графика популяции;

Population



класс, представляющий популяцию, состоящий из набора
особей;

29


Parser



класс, выполняющий преобразование функций оптимального
проектирования в математическую функцию на языке
C
#
;

GA



основной класс, реализующий основную оптимизацию методом
ГА.

Для дополнительного сопровождения и полного представления
описания присущих классов в таблице 2.S представлены описания классов
данного подмодуля.


Рисунок 2.9


Диаграмма классов проектного модуля ГА

30


Таблица 2.S


Описание классов проектного модуля ГА

Имя класса

Метод

Входные данные

Выходные
данные

Назначение

Vector

Vector

int

-

Создание пустого вектора,
размерностью i.

Vector

Vector

params double[]

-

Заполнение вектора путем
передачи массива.

Vector

operator

-

Vector, Vector

Vector

Операция разности
векторов.

Vector

operator
-

Vector v1

Vector

Инвертируем значения
полей вектора.

Vector

operator

+

Vector, Vector

Vector

Операция сложения
векторов.

Vector

operator

+

double, Vector

Vector

Сложение числа с вектором.

Vector

operator

*

double, Vector

Vector

Операция умножения числа
на вектор.

Vector

operator

*

Vector, Vector

Vector

Операция умножения
вектора на вектор.

Vector

operator

/

Vector, double

Vector

Операция деления вектора
на число.

Vector

Multiplication

Vector, Vector

Matrix

Умножение вектора на
транспонированный вектор.

Vector

ToString()

-

string

Строковое представление
вектора.

Vector

ToReal()

-

Vector

Декодированное значение
вектора.

Vector

FitnessFunction

-

double

Приспособленность особи
(значение функции в точке).

Population

Population

Vector, Vector, int

-

Конструктор,
генерирующий случайную
популяцию заданного
размера

Population

Population

Vector, Vector, int,
Coding, byte

-

Конструктор,
генерирующий случайную
популяцию заданного
размера

Population

TournamentSel
ection

int

Vector[]

Турнирная

селекция
.

Population

Population

int

ListVector&#xVe-3; to-;r-3;

Метод, который возвращает
родительский отобранный
из текущей популяции.

GA

Crossing

Vector, Vector

ListVector&#xVe-3; to-;r-3;

Скрещивание

выбранных

особей
.

GA

Crossing
-
Integer
-
OnePoint

Vector, Vector

ListVector&#xVe-3; to-;r-3;

Одноточечное скрещивание
для целочисленного
кодирования.

GA

CrossingInteger
TwoPoint

Vector, Vector

ListVector&#xVe-3; to-;r-3;

Двухточечное скрещивание
для целочисленного
кодирования.

31



Продолжение таблицы 2.S

GA

CrossingInteger
Uniform

Vector, Vector

ListVector&#xVe-3; to-;r-3;

Однородное скрещивание
для целочисленного
кодирования.

GA

CrossingBLXal
pha

Vector, Vector, double

ListVector&#xVe-3; to-;r-3;

BLXα
-

скрещивание

GA

MutationBit

Vector

Vector

Битовая

мутация
.

GA

MutationRealV
alued

Vector

Vector

Мутация

для

вещественной

особи
.

GA

m

Population population

Vector

Генетический алгоритм
(для вещественного
кодирования).

GA

mInteger

Population population

Vector

Генетический алгоритм
(для целочисленного
кодирования).

Для представления программного модуля классических методов были
созданы такие классы как:




класс
,

реализации методов переменной
метрики;




класс
,

реализации методов сопряженных
градиентов;




класс, выполняющий запись данных в файл;

Function



класс, представляющий собой функцию оптимизации в виде
свертки частных
критериев в задачах многомерной оптимизации;

Vector



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

Parser



класс, выполняющий
к
омпиляцию

кода с переданной функцией

в задачах оптимального проектирования
;

Matrix



класс, набор полей и методов для работы с матрицами;

One
D
imensional
O
Ptimization


к
ласс, представляющий набор методов
одномерной оптимизации;

Также в таблице 2.4 приведены описания классов, входящих в
подмодульный состав ядра классических алгоритм
ов оптимизации, но не
представлен класс
Vector
, так как является адаптацией класса, описанного
выше, содержащий аналогичное представление.

32



Рисунок 2.1P


Диаграмма
классов
модуля классических методов
оптимизации

Таблица
2.
4



Описание классов
модуля
классических методов оптимизации

Имя класса

Метод

Входны
е
данные

Выходные
данные

Назначение

One
D
imensional
O
Ptimiz
ation

bolzano()

-

void

Метод
-

Больцано

One
D
imensional
O
Ptimiz
ation

bolzano_davidon()

-

double

Метод Дэвидона

One
D
imensional
O
Ptimiz
ation

dy()

double

double

Производная в точке по
направлению

One
D
imensional
O
Ptimiz
ation

f()

double

double

Значение функции в новой
точке

One
D
imensional
O
Ptimiz
ation

firstderivativefirst
()

-

Vector

Первая формула численного
дифференцирования

33



Продолжение
таблицы 2.4

One
D
imensional
O
Ptimiz
ation

firstderivativefourth
()

-

Vector

"етвертая формула
численного
дифференцирования

One
D
imensional
O
Ptimiz
ation

firstderivativesecond
()

-

Vector

Вторая формула численного
дифференцирования

One
D
imensional
O
Ptimiz
ation

on
()

Vector,
Vector

double

Получить альфа методом
Больцан
-
Давидон

One
D
imensional
O
Ptimiz
ation

()

Vector,
Vector

double

Получить альфа методом
Золотого сечения
-

1

One
D
imensional
O
Ptimiz
ation

point
()

double

void

Переход к следующей точке
одномерного пространства

One
D
imensional
O
Ptimiz
ation

sven(
)

-

void

Метод Свенна

One
D
imensional
O
Ptimiz
ation

y()

-

double

Значение функции в точке

Matrix

()

Matrix

double

Определитель матрицы

Matrix

E()

int

Matrix

Единичная матрица
размером NxN

Matrix

Exclude()

int, int

Matrix

Возвращает матрицу без
указанных строки и
столбца. Исходная матрица
не изменяется.

Matrix

inverse()

Matrix,
int

Matrix

Обратная матрица.
Обратная матрица
существует только для
ква
дратных,
невырожденных, матриц

Matrix

transpose()

Matrix

Matrix

Транспонирование матицы

Matrix

ToString()

void

string

Строковое представление
матрицы

Function

firstderivativefirst
()

-

Vector

Первая формула численного
дифференцирования

Function

firstderivativefourth
()

-

Vector

"етвертая формула
численного
дифференцирования

Function

firstderivativesecond
()

-

Vector

Вторая формула численного
дифференцирования

Function

grad_1()

Vector

Vector

Значение производной в
текущей точке. Первая
формула
численного
дифференцирования

Function

grad_2()

Vector

Vector

Значение производной в
текущей точке. Вторая
формула численного
дифференцирования

Function

grad_4()

Vector

Vector

Значение производной в
текущей точке. "етвертая
формула численного
дифференцирования

Function

y()

Vector

double

Текущее значение функции


34



Продолжение таблицы 2.4

ConjugateGradientMetho
ds


Vector,
Vector

double

значение бета по формуле
Даниела


ConjugateGradientMetho
ds


Vector,
Vector

double

значение бета по формуле
Диксона


ConjugateGradientMetho
ds


Vector,
Vector

double

значение бета по формуле
Флетчера
-
Ривса


ConjugateGradientMetho
ds


Vector,
Vector

double

значение бета по формуле
Полака
-
Рибьера


ConjugateGradientMetho
ds


Alpha,
Alpha

Vector

Нахождение минимума с
помощью одного из
четырех методов
сопряженных градиентов


BFGSH()

Vector,
Vector

Matrix

Формула переменной
метрики Бройдена

Флетчера

Гольдфарба

Шенно


BFSH()


Vector,
Vector

Matrix

Формула переменной
метрики Бройдена

Флетчера

Шенно


Broiden()

Vector,
Vector

Matrix

Формула переменной
метрики Бройдена


DFP()

Vector,
Vector

Matrix

Формула
переменной
метрики Дэвидона

Флетчера

Пауэлла


MK()

Vector,
Vector

Matrix

Формула переменной
метрики Мак
-
Кормика


Pirson_2()

Vector,
Vector

Matrix

Формула переменной
метрики Пирсона
-
2


Pirson
_3()

Vector,
Vector

Matrix

Формула переменной
метрики Пирсона
-
3


PZ()

Vector,
Vector

Matrix

Формула переменн
ой
метрики Проекции
Зауте
ндийка

В программное обеспечение ядра также входит сторонняя библиотека
ZedGraph

с открытым исходным кодом, которая позволяет отображать данные
в виде графиков, с целью дополнительного анализа выполняемых проектных
решений.

2.4.

Интеграция ядра
DDCore

с пакетными модулями
PSpice

Система моделирования
PSpice

предоставляет обширные инструмен
ты
для взаимодействия между программными модулями программы посредством
различных настроек и параметров запуска отдельных модулей. Для того,
35


чтобы создать полноценное программное обеспечение, необходимо
выполнить задачу интегрирования проблемно
-
инвариантно
го ядра
DDCore

с
САПР
PSpice
, чтобы результирующая система работала как единое целое,
используя мощные средства моделирования, анализа радиоэлектронных схем
и в то же время имела доступ к таким же мощным средствам оптимизации
различных параметров проектиру
емых схем. "тобы добиться выполнения
такой задачи был реализован класс
PSpiceControl
,

который является
управляющим для всего ядра и всех пакетов системы
PSpice
.

Класс
PSpiceControl

способен вызывать различные модули
PSpice

в виде
процессов, перехватывая и
х управление. Данная имплементация происходит
при помощи класса
Process

пространства имён
System
.
Diagnostics
,
который
предоставляет требуемые возможности.

Запуск и отработка необходимых подмодулей
PSpice

происходит, когда
управляющий класс
PSpiceControl

создаёт объект класса
Process
, оперируя
конструктором класса
ProcessStartInfo
,
имеющего следующую сигнатуру:

var

startInfo =
new

ProcessStartInfo
(
link
)


{


Arguments

=
args


};

где
link



полный

путь к интересующему модулю
PSpice
;


args



аргументы запуска с которыми выполнится данный
модуль (вводятся через пробел).

При выполнении процесса оптимального проектирования необходимо,
чтобы модуль
Schematics
,

системы
PSpice
,
выполнял процедуру
моделиров
ания множество раз, для отыскания оптимального решения, для
этого необходимо запускать данный модуль передавая ему параметры запуска
в виде аргументов через пробел, также добавляя путь к файлу оптимизируемой
схемы.

Параметры запуска модуля
Schematics

для р
ешения задач оптимизации
выглядят следующим образом:

/
R



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

36


/
E



параметр, указывающий модулю
Schematics

автоматически
уничтожать свои процессы, высвобождая оперативную память, после

завершения процесса моделирования.

Процесс
оптимизации

частотной

характеристики с использованием
модуля
PSpiceControl

будет включать следующую последовательность шагов:

1.

Запуск
графического редактор
а

Schematics

и ввод принципиальной
схемы корректора.

2.

Формирование файла
*
.

с помощью команды меню

Creat



Фрагмент данного файла приведен на рисунке S. Полученный файл
содержит описание всех схемных компонентов и является входным
для модуля
PSpice
.

3.

Запуск модуля анализа
PSpice

с помощью команды

S
imulate

. При
этом выполняется моделирование исходного варианта схемы и вывод
текущей частотной характеристики в файл
*
.
out
. Далее управление
передается модулю
PSpiceControl
.

4.

После запуска модуль
PSpiceControl

читает исходный и выходной
файлы, выполняет их

синтаксический анализ и предоставляет
пользователю в режиме диалога задать вектор варьируемых
параметров, ограничения, желаемую частотную характеристику и
метод оптимизации.

5.

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

в режиме командной строки и выполняется расчет текущей
частотной характеристики. Выхо
д из цикла осуществляется по
достижению требуемой точности либо по требованию пользователя.

37


2.5.

Описание пользовательского интерфейса

Рабочее окно, реализованного программного обеспечения, представлено
на рисунке 2.11, на верхней части которого расположены S

кнопки, при
помощи которых пользователь задает путь к файлу
*.
, исследуемой схемы;
критерий оптимизации для решения задачи оптимального проектирования и
выполняет запуск оптимизационного процесса. Помимо кнопок
взаимодействия на главном окне расположен
а информативная часть, в виде
текстовых полей, выполняющих отображение характеристик исследуемой
схемы до и после оптимизации.


Рисунок
2.11


Основное окно программы

При нажатии на кнопку Выбор файла схемы», открывается стандартное
окно проводника
Windows

(рис. 2.12), с помощью которого необходимо
указать место расположения файла схемы в формате
*
.
.

38



Рисунок 2.12


Проводник
Windows
, для выбора файла *

Также главное окно содержит вложенное меню Файл» и Настройки»
(рис. 2.1S), с помощью кото
рого пользователь может:



задать гибкие настройки системы;



просмотреть график частотной характеристики принципиальной
схемы;



открыть файл, содержащий решение предыдущих задач
оптимального проектирования;



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



выполнить оптимизацию многомерных функций, задав область
поискового пространства для переменных или стартовую точку.


Рисунок 2.1S


Окно меню

39


К примеру, при выборе файла схемы, изображенной на р
исунке 2.14,
окно критерия оптимизации для схемы усилительного каскада на биполярном
транзисторе будет иметь вид, представленный на рисунке 2.15.


Рисунок
2.14


Усилительный ка
скад на биполярном транзисторе

Окно задания критерия оптимизации разделено на
две зоны: правую и
левую.

Правая зона представляет собой область, где пользователь задает набор
точек частотной характеристики целевой схемы. Также в зоне Задать набор
точек» присутствуют три кнопки:

Задать»


кнопка для задания набора точек, введенных п
ользователем
в качестве желаемой характеристики исследуемой схемы;

Сохранить в файл»


кнопка, позволяющая сохранить введенный набор
точек;

Открыть файл»


кнопка, позволяющая открыть файл формата
*.
txt
, в
котором содержится набор точек желаемой частотно
й характеристики
исследуемой схемы.

Левая зона представляет собой область для выбора возможных
элементов для оптимизации и задания области поиска для каждого элемента.

Ввод данных задается при помощи кнопки Задать».

40



Рисунок
2
.15


Окно ввода критерия
оптимальности

При нажатии на кнопку Открыть файл» появляется стандартный
проводник
Windows
, с помощью которого необходимо указать путь к файлу
содержащий набор точек желаемой характеристики (рис. 2.16).


Рисунок 2.16


проводник
Windows

При выборе пункта

меню Оптимизация многомерных функций»
появляется окно (рис. 2.17), предоставляющее пользователю задать функцию
для оптимизации в текстовом виде, выбрать поисковой интервал и выполнить
оптимизацию исследуемой функции. Если начально и конец поискового
инте
рвала задать равными, не обозначив при этом какой переменной
41


принадлежит

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


Рисунок 2.17


Окно оптимизации многомерных функций

При

клике кнопки Настройки», расположенной в верхней части
главного окна, появляется окно настроек, представленное на рисунке 2.18.
Пользователю предлагается настроить три основных параметра проблемно
-
инвариантного

ядра:

1.

Настройки генетического алгоритма, по
зволяющие задать:

o

начальный размер популяции;

o

количество итераций;

o

вероятность скрещивания;

o

вероятность мутации;

o

размер турнирного отбора;

o

количество разрядов кодирования области поиска;

o

процент разрыва поколений;

o

вероятность инверсии;

o

включить/выключить уплотнение сетки;

o

включить/выключить популяционный всплеск;

42


o

выбрать тип кодирования скрещивания и алгоритм фиксации
точки минимума.

2.

Настройки классических методов оптимизации, позволяющие:

o

задать точность локализации минимума;

o

максим
альное количество итераций;

o

выбрать формулу, используемую при численном
дифференцировании;

o

выбрать используемый метод сопряженных градиентов;

o

выбрать используемый метод переменной метрики.

3.

Настройки оптимизации в одномерном пространстве, позволяющие:

o

з
адать точность локализации минимума;

o

максимальное количество итераций;

o

метод оптимизации в одномерном пространстве.


Рисунок
2.18



О
кно настроек программы

Реализованное программное обеспечение, также включает обработку
исключений, вызывающих падение программы, возникающее при ошибках
43


ввода; запуска процесса оптимизации, при отсутствии файла схемы, данных
для оптимизации и т.п. Из
-
за простой реализации отлова

исключений, их
описание опущено.

2.6.

Выводы

При разработке проблемно
-
инвариантного ядра проведено
исследование методов оптимизации, принадлежащих классам сопряженных
градиентов, переменной метрики и генетическим алгоритмам. Произведен
выбор стратегии поиска о
птимального решения. Представлено
математическое и алгоритмическое описание модификации генетического
алгоритма оптимизации и классических методов оптимизации. Выполнена
программная реализация системы оптимального проектирования
DDCore

с
описанием всех про
ектных процедур программного обеспечения. После чего
произведена интеграция реализованной системы с пакетом программных
модулей САПР
PSpice
.
Последним этапом проведено описание
пользовательского интерфейса системы
DDCore
.
Код основных классов
программного
обеспечения приведен в приложении А.

Программное обеспечение выполнено в среде разработки
Visual

Studio

2017
Professional

с использованием технологии
WPF
.

44


3.

ПРИМЕНЕНИЕ ПРОБЛЕМНО
-
ИНВАРИАНТНОГО ЯДРА
ДЛЯ РЕШЕНИЯ ЗАДА" ОП
ТИМИЗАЦИИ

3.1.

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

Применим связку генетические алгоритмы
-
классические методы
оптимизации для функции
. Для проверки
воспользуемся математическим анализатором
Wolfram

Alpha

(рис. S.1)
.


Рисунок S.1


Графическое представление функции

Как видно из рисунка, функция имеет минимум в точке
.

Зададим начальные параметры для целочисленного кодирования и
двухточечного скрещивания и запустим генетический алгоритм. График ГА
эволюционного развития с заданными параметрами пр
едставлен
на рисунк
е
3
.2.


Рисунок S.2


График эволюционного развития

45


Из рисунка видно, что график данного алгоритма стабилизировался и
перестал уменьшаться на начальных итерациях, но потом из
-
за
дополнительных эвристических параметров, популяция видоизм
енилась и
зашла в область седловой точки.

После этого, передадим найденную точку в алгоритм классической
оптимизации, а именно: алгоритм Метод
Бройдена

Флетчера

Гольдфарба

Шенно (рис
. 3
.3).


Рисунок S.S


Результат оптимизации

Из рисунка видно, что метод
переменной метрики нашел минимум, дав
хороший результат.

Далее запустим всю программу заново, но теперь в качестве
классического метода оптимизации будем использовать метод Флетчера
-
Ривса
(рис

3
.4).



Рисунок S.4


Результат оптимизации

46


Как видно из рисун
ка, используемый метод сопряженных градиентов
находит минимум с наименьшей погрешностью.

Для решения реальной задачи оптимального проектирования с задачей
оптимизации элементов радиоэлектронной схемы, ядро
DDCore

было
протестировано на некотором наборе фун
кций, дабы не заполнять место
понятным итерационным процессом, опущены оконные формы программного
обеспечения (в виде диалоговых окон с результатами оптимизации).

Полученные данные после тестирования класс алгоритмов сопряженных
градиентов представлены в
таблице S.1.

Таблица S.1


Тестирование алгоритмов сопряженных градиентов

Функция

Начальная
точка

Точность
поиска

Метод
оптимизации

Количество
итераций

Результат
оптимизации


Глобальный минимум
[1;1;1]

[
-
5;4;2]


Даниел

42

[1;1;1]

Полак
-
Рибьер

50
0

[1;1;1]

Флетчер
-
Ривс

35

[1;1;1]

Диксон

44

[1;1;1]


Даниел

50
0

[1;1;1]

Полак
-
Рибьер

50
0

[1;1;1]

Флетчер
-
Ривс

48

[1;1;1]

Диксон

50
0

[1;1;1]


Даниел

29

[1;1;1]

Полак
-
Рибьер

16

[1;1;1]

Флетчер
-
Ривс

12

[1;1;1]

Диксон

35

[1;1;1]


Глобальный минимум
[
0
;0;0;0]

[
-
1;
-
1;
-
1;
-
1]


Даниел

50
0

[
-
0,7616;0,0741;
-
0,2901;
-
0,4758
]

Полак
-
Рибьер

50
0

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]

Флетчер
-
Ривс

105

[0;0;0;0]

Диксон

50
0

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]


Даниел

50
0

[
-
0,7616;0,0741;
-
0,2901;
-
0,4758
]

Полак
-
Рибьер

50
0

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]




47


Продолжение таблицы
3.1


Глобальный минимум
[
0
;0;0;0]



Флетчер
-
Ривс

38

[0;0;0;0]

Диксон

50
0

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]


Даниел

50
0

[
-
0,7616;0,0741;
-
0,2901;
-
0,4758
]

Полак
-
Рибьер

50
0

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]

Флетчер
-
Ривс

215

[0;0;0;0]

Диксон

500

[
-
0,7582;0,074;
-
0,289;
-
0,4727
]

Из анализа таблицы
можно сказать, что все методы находят минимум в
большинстве случаев. П
р
и использовании точности поиска

=
10

6

некоторые из алгоритмов начинали вылетать за пределы локализации
минимума, из этого можно сделать вывод, что оптимальная точность поиска
должна быть равной

, но в то

же время нельзя упускать тот факт,
что точность нахождения во много
м зависит от выбранного метода
численного дифференцирования, его точности и выбранного метода
одномерного поиска, для получения величины шага вдоль направляющего
вектора.

Наилучшим алгоритмом поиска минимума является метод Флетчера
-
Ривса, дающий лучший ре
зультат и выполняющий оптимизацию за
наименьшее количество итераций, в сравнении с другими методами.

Все
остальные
методы работают примерно одинаково, различаясь, в
неравных погрешностях найденного минимума, небольшим различием в
количестве и
тераций. Так,

например, если в

метод

Даниеля, то количество
итераций может быть больше, в тоже в время возрастет и точность поиска.
Также метод Полака
-
Рибьера иногда показывал себя как худший, вылетая
дальше всех от точки минимума.

Далее следует тестирование класса мет
одов сопряженной метрики,
полученные данные представлены в таблице S.2.

48


Таблица
3.2


Тестирование алгоритмов переменной метрики

Функция

Начальная
точка

Точность
поиска

Метод
оптимизации

Количество
итераций

Результат
оптимизации


Глобальный минимум
[1;1]

[
-
1;3]




БФГШ

2

0,99999998028055;

0,9999999605916

БФШ

10

0,999069728428759;
0
,998138668621906

Бройден

4

Расходится

ДФП

8

1,00000006331082;
1,00000011991772

МК

12

0,999999918632574;
0
,999999837283312

Пирсон
-
2

4

Расходится

Пирсон
-
3

9

1,00001997958861;
1,00004178501604

ПЗ

12

0,99999991863257;

0,9999998372833


Глобальный минимум
[1;3;
-
5]

[
-
1;
-
2;3]


БФГШ

2

1;3;
-
5

БФШ

2

0,999999948845354;
2,99999992277526;


-
4,99999997734892

Бройден

5

0,999567257841629;
3,00033909774361;


-
4,99997405283289

ДФП

3

0,99968014208582;
3,00062138857305;


-
5,00042568606552

МК

5

0,99968014208582;
3,00062138857305;


-
5,00042568606552

Пирсон
-
2

12

1; 3;
-
4,9999999999998

Пирсон
-
3

9

1; 3;
-
4,9999999999998

ПЗ

8

0,999999948845354;
2,99999992277526;


-
4,99999997734892

Из полученных данных видно, что методы БФГШ, класса переменной
метрики, и метод Флетчера
-
Ривса, класса сопряженных градиентов,
позволяют получить оптимальный результат в сравнении с другими
алгоритмами оптимизации. Таким образом при решении задач оптимальн
ого
проектирования целесообразно применять вышесказанные методы с
точностью локализации минимума
.

49


3.2.

Решение задач оптимального проектирования

При тестировании проблемно
-
инвариантного ядра для реальной задачи
оптимального проектирования

выбрана схема корректора частотной
характеристики виниловых колонок, изображенная на рисунке S.5.


Рисунок S.5


Схема корректора "Х

Значения параметров всех элементов данной схемы уже являются
оптимальными, поэтому целесообразно для элементов, выбранных

в качестве
задания на оптимизацию изменить их значения на некорректные. В качес
тве
варьируемых параметров будут использованы

сопротивления резисторов R11,
R1S и емкости конденсаторов C12, C1S, C14.

Значения данных элементов
были сбиты и представлены в та
блице S.S.

50


Таблица S.S


Значения варьируемых элементов

Название элемента

Значение

R11

100

R13

100k

C12

10

C13

100p

C14

1

График желаемой "Х представлен на рисунке S.6.


Рисунок S.6


График желаемой "Х корректора

График "Х со значениями элементов,
представленных в таблице S.S,
изображен на рисунке S.7.


Рисунок S.7


График текущей "Х корректора

Целевая функция задана, как среднеквадратичное отклонение текущей
частотной характеристики от желаемой в соответствии с формулой:


51


гд
е





количество частотных точек,



текущее значение
частотной характеристики

в
i
-
ой точке,



желаемое значение частотной
характеристики в i
-
ой точке
.

Процесс
оптимизации

частотной

характеристики с использованием
модуля
DDCore

включает следующую последовательность шагов:

1.

Первым шагом выполняется запуск программы и задается путь к фалу
*
.
net
, содержащий описание схемы (рис. S.8).


Рисунок S.8


Выбор файла *.

исследуемой схемы

2.

Далее задается набор точек, представляющих желаемую "Х. Модуль
DDCore

читает исходный файл, выполняет синтаксический анализ и
предоставляет пользователю в режиме диалога задать вектор
варьируемых параметров, ограничения, желаемую частотную
характеристику и

метод оптимизации

(
рис. S.9
)
.


Рисунок S.9


Ввод желаемой "Х и задание варьируемых параметров

52


3.

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

в режиме
командной строки и выполняется расчет текущей частотной
характеристики.

4.

На последнем шаге программное ядро заканчивает оптим
изацию
варьируемых параметров и выдает окно результата,
представленное на рисунке S.1P.


Рисунок S.1P


Результат работы ядра оптимизации

На рисунке S.11 представлены S разных графика корректора "Х:

o

при идеальных значениях варьируемых элементов;

o

при сбитых значениях варьируемых элементов;

o

при полученных, после процесса оптимизации, значениях
варьируемых элементов

53



Рисунок S.11


Несколько графиков "Х корректора

График "Х при идеальных значениях варьируемых параметров
полностью совпадает с графи
ком "Х при значениях, полученных после
оптимизации, поэтому на рисунке возможно увидеть только две "Х
корректора.

3.3.

Выводы

Применение проблемно
-
инвариантного ядра началось с тестирования
основных программных модулей, в результате которых было выявлено, что
д
ля получения оптимальных решений двухэтапной стратегией поиска,
необходимо использовать ГА совместно с
алгоритмом Бройдена

Флетчера

Гольдфарба

Шенно

или алгоритмом Флетчера
-
Ривса при точности
локализации минимума
, так как данные
методы являются лидерами
среди методов своего класса и находят оптимальные решения за минимальное
количество итераций, с большей точностью. Также данное ядро
протестировано в рамках реальной задачи оптимального проектирования на
схеме корректора "Х, при вы
полнении которой найден оптимальный
результат, получены значения варьируемых параметров, при которых график
"Х схемы полностью совпадает с желаемой характеристикой.

54


4.

РАЗРАБОТКА И СТАНДАР
ТИЗАЦИЯ ПРОГРАММНЫХ
СРЕДСТВ

4.1.

Планирование работ

Абсолютный период выпол
нения работы

в сумме
составил
три с
половиной месяца, начало выполнения ВКР было положено в ноябре,
продолжительностью

две недели


на данном этапе проводилось
формирование технического задания, определение необходимых
программных средств для реализации по
ставленной задачи, оценка времени,
необходимого для выполнения последующих этапов проекта, с учетом
доработки и исправлений, которые необходимо внести в проект, после
изначального исполнения. Последующий шаг выполнения ВКР занял два
месяца


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


апрель. В этот период
был написан текст ВКР. В завершающие две недели, начиная с мая,
осуществлялась работа над корректировкой ВКР и доведение её до валидного
уровня.

На рис. 4.
1

представлена диаграмма Ганта, показывающая этапы
работы над ВКР, протяжённые во времени, в виде временных отрезков с
датами начала и конца каждого периода

[
9,
4
-
5
c
.
]
.

Наименования работ:

1.

Постановка технического задания, рассмотрение начальных данных.

2.

Исследование материала по теме Многокритериальная
оптимизация»

3.

Исследование материала по теме Оптимальное проектирование»

4.

Исследование материала по теме
Генетические алгоритмы»

5.

Исследование материала по теме Работа с пакетом
PSpice
»

6.

Исследование материала по теме Диалоговые системы
схемотехнического проектирования»

55


7.

Разработка программного модуля 
PSpiceControl
»

8.

Разработка программного модуля 
Virualizat
ionGeneticAlgorithm
»

9.

Разработка инегрирующего ядра 
PSpice
_
Opt
»

10.

Разработка диалогового интерфейса для ядра 
PSpice
_
Opt
»

11.

Очерк пунктов ВКР

12.

Написание раздела ВКР Введение»

13.

Написание раздела ВКР Архитектурные решения оптимального
проектирования»

14.

Написание раздела ВКР Математическое и алгоритмическое
обеспечение ядра
DDCore
»

15.

Написание раздела ВКР Решение задач оптимального
проектирования»

16.

Написание раздела ВКР Заключение»

17.

Написание раздела ВКР Список использованной литературы»

18.

Доведение оформле
ния ВКР до валидного уровня

56



Р
исунок 4.
1



Диаграмма Ганта

поэтапного выполнения ВКР

57


Код разрабатываемого программного изделия

Общероссийский классификатор продукции (ОКП)


российский
государственный стандарт, входящий в состав
Единой системы
классифи
кации и кодирования технико
-
экономической и социальной
информации»

и служащий для обработки данных о продукции во всех
аспектах народного хозяйства.
ОКП
обеспечивает достоверность
,
сопоставимос
ть и автоматизированную

обработк
у

информации о продукции

и
услу
гах

в таких сферах деятельности как экономика
,

стандартизация,
статистика

и другие. ОКП
является

систематизированны
м

свод
ом

кодов и
наименований группировок продукции

и её обозначений
, построенных по
иерархической системе классификации. Классификатор
необх
одим

при
решении задач каталогизации продукции, включая разработку каталогов и
систематизацию в них продукции по важнейшим технико
-
экономическим
признакам; при сертификации продукции в соответствии с группами
однородной продукции, построенными на основе гр
уппировок ОКП; для
статистического анализа производства, реализации и использования
продукции на макроэкономическом, региональном и отраслевом уровнях; для
структуризации промышленно
-
экономической информации по видам
выпускаемой предприятиями продукции
для

осуществления маркетинговых
исследований и
снабженческо
-
сбытовых операций

[
9
, 13
-
17
c
.
]
.


Рисунок 4.2



Структура кодирования продукции в ОКП

Как видно из рисунка 4.2
,
ОКП
включает в себя шесть позиций,
содержащих
цифровой код
:

однозначное контрольное число и наименование
группировки продукции.

П
ятиступенчатая иерархическая классификация
58


предусмотрена
в

ОКП с цифровой десятичной системой кодирования. На
каждой ступени классификации
выполняется деление

по наиболее значимым
эконом
ическим и техническим классификационным признакам.
Первая
ступен
ь классификации описывает

класс продукции (XX PPPP), втор
ая
-

подкласс (XX XPPP), третья
-

группу

(XX XX00),
четвертая

-

подгрупп
у (XX
XXXP) и
пят
ая ступень

отображает вид

продукции (XX XXXX).

Коды 2
-
5
-
разрядных группировок продукции дополн
яются
нулями до
шести

разрядов и
записываются с интервалом между вторым и третьим разрядами.
Для ряда
продуктов к
лассификация
ОКП может завершиться

на третьей, четвертой или
пятой ступенях классификационного
деления. При записи отдельных
наименований классифи
кационных группировок используется

сокращенн
ая
форма записи, при которой лексические элементы заменяются графическими:



начальная часть полного наименования исключается и заменяется на
тире, в том случае, е
сли она дублирует предыдущее наименование;



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

Для одно
вариантного понимания и дифференцирования

объемов
используемых понятий
каждая
отдельная позиция ОКП заключает в себе
пояснения, приводящиеся

под наименованием
той
позиции, к которой они
непосредственно относятся.

Во избежание
возможности попадания в данную позицию
классификатора объекта,

который уже входит

в другую позицию,

приводятся

п
ояснения
,

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

Подробная градация разрабатываемого программного продукта в
соответствии с ОКП приведена ниже.

Код 5P
XXXX

принадлежит
классу программных продуктов.

59


Код 5P4
XXX

принадлежит

подклассу прикладных программных средств
для проектировани
я.

Код 5P4S
XX

принадлежит

группе программных средств для систем
автоматизированного проектирования (САПР).

Код
50439
X

принадлежит

подгруппе программных средств для систем
автоматизированного проектирования (САПР) прочие.

Программное средство, проектируемое

в рамках данной работы, имеет
ОКП 5P4S9P. Незаполненные значащие разряды дополнены нулями, так как
классификация была завершена на пятой ступени деления.

4.2.

Затраты на выполнение и внедрение проекта

Расходы на проектирование ПС рассчитывались на стадии оконч
ания
программной разработки ПС с целью установления рыночной стоимости
спроектированной продукции с учетом предполагаемых объемов
тиражирования. В связи с тем, что д
анные расчеты выполнены по завершении

прое
ктирования

они
являются фактическими.

Расчеты

осу
ществлены после
выполнения этапа эксплуатации, затраты которой, в свою очередь,
учитывались как фактические расходы по данной статье затрат.

Расходы на разработку ПС рассчитывались по формуле:

,

где



персональные затраты для оплаты труда разработчика, в том
числе все выплаты связанные с этим;




расходы на средства вычислительной техники, которая
использовалась при проектировании;




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




прочие расходы на разработку.

Издержки, обеспечивающие оплату труда разработчиков, при
однородном составе команды, рассчитываются по формуле:

,

60


где



заработная плата одного разработчика (или руководителя) за
один месяц (в рублях);




накладные расходы, начисляемые к сумме заработной платы
разработчиков (или руководителей) (в процентах);




отчисления в ф
онды, которые относятся к единому социальному
налогу (в процентах);



загрузка разработчика работой по проекту (в процентах);




количество времени, задействованного разработчиком при
проектировании продукта (в месяцах);



количество разработчиков, участвующих в проекте.

Отсюда следует, что расходы на оплату труда разработчиков и
руководителей

составляют:


Расчет производился по окончании проекта, потому величина времени,
затраченного на разработку, фактическая.

Необходимые для проектирования СВТ могут быть поступать в
эксплуатацию разработчика различным образом.
В данном проекте было
использовано собственное СВТ проектировщика, при этом
затраты
рассчитыва
лись

по аналогии с арендой машинного времени, но без учета
прибыли арендодателя.

Расходы на СВТ, взятые в аренду на период
выполнения проекта
в общем виде находят
ся

по формуле:


где


время аренды i
-
ого
СВТ,
как правило равное величине



днях);




арендная плата за i
-
е СВТ (в руб./день);




затраты на обслуживание и ремонт i
-
ого СВТ (в руб./день);

61





общее количество арендуемых СВТ.

Рас
ч
ет

величины

арендной платы
, без учета прибыли арендодателя,
производится
по формуле
:

,

где



балансовая
стоимость i
-
ого

СВТ (в рублях);




нормативный срок службы СВТ

(в годах)
;




количество раб
очих дней СВТ в году (в днях).

Также р
асчет предполагает равномерный характер амортизации
арендуемого
СВТ. Величин
а
амортизационных отчислений вычисл
яется

с
учетом применяемой схем
ы амортизации и года службы СВТ по формуле
:


,

г
де




ежемесячная оплата обслуживания и ремонта СВТ

(в рублях);



среднее число рабочих дней в месяц (в днях).

Расчет затрат на собственное СВТ разработчика производился таким
образом
:




Расчеты выполнялись по окончании проекта, потому величина
потребного машинного времени СВТ является фактической.

Затраты на инструментальные программные средства
(ИПС) для
программирования рассчитывались по аналогии с затратами на СВТ,
но
по
причине того, что

используемое ИПС, а именно
Visual

Studio

2017

Student
Edition
,

является общедоступным, вследствие этого с
тоимость ИПС

не
учитывалась, то есть

62


П
рочи
е

затрат
ы

на проектирование

включают в себя
все
нестандартные» прямые затраты, не
относящиеся к

накладны
м

расход
ам,
например, приобретение
канцелярии или учебных пособий
. В данном случае
такие затраты отсутствуют,
то есть

.

Таким образом общее количество затрат на проектирование
представляет соб
ой себестоимость проекта и составляет:


На базе

произв
еденных вычислений,

затратным методом
ценообразования
,
была определена

общая

цена разработки ПС
, в то время как
цена

договора
, п
ри выполнении проекта по договору с заказчиком
,

рассчитывалась по
формуле
:


где



прибыль, помещенная

в договорную цену

(в процентах)
.

Рыночная стоимость спроектированного продукта составляет:


63


ЗАКЛЮ"ЕНИЕ

В выпускной квалификационной работе описаны архитектурные
решения
и задачи

оптимального проектирования

в САПР, выполнен анализ
взаимодействия

модулей целевой программы
PSpice
, выявлены
положительные особенности данной системы и ее недостатки, предложена
модификация стандартной архитектуры компании
MicroSim

с целью
улучшить и рас
ширить программные возможности продукта
PSpice
.
Произведено сравнение двух платформенно
-
независимых языков
программирования
Java

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

Данная работа включает в себя рассмот
рение математического и
алгоритмического обеспечения разработанного проблемно
-
инвариантного
ядра
DDCore
: проведено исследование большого набора методов;

выбрано

построение программной логики ядра на двухэтапной стратегии оптимизации,
использована связка ге
нетический алгоритм с методом БФГШ; при
оптимизации большого числа параметров проектируемой схемы выполняется
более устойчивая связка генетического алгоритма с методом Флетчера
-
Ривса.

Также работа содержит

тестирование программы на большом спектре
различн
ых функций, при помощи которых выбрано оптимальное соотношение
вариаций параметров алгоритмов оптимизации (шаг дискретизации, точность
локализации минимума, ограничение на количество итераций и т.д.), далее
проводилось тестирование в условиях реальных зада
ч (оптимизация активных
и реактивных элементов различных схем). Все тесты прошли проверку, дав
оптимальные результаты, что доказало состоятельность разработанного
продукта.

Ключевым результатом выпускной квалификационной работы являетс
я
построение
проблемн
о
-
инвариантного ядра, реализованного
на языке
программирования
C
#
, интегрированного в состав САПР
PSpice

для решения
задач оптимизации
схемотехнического проектирования
.


64


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

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

Интерфейс клиентского приложения данной системы разрабатывался
простым и п
онятым для восприятия даже тех пользователей, которые не
имеют углубленных познаний в схемотехнике

и задачах оптимального
проектирования
.

В свою очередь программное обеспечение несомненно имеет
перспективы для дальнейшего развития, например, уменьшение
вы
числительной нагрузки на ПК путем распределения нагрузки, разделив
диалоговое представление программы и вычислительные пакеты, поместив
последние на удаленные сервера, таким образом сделав систему
децентрализованной;

так как

о
бщеизвестным фактом является
отсутствие
универсального метода при параметрической оптимизации электронных схем
даже одного класса
, целесообразно
п
одключение
к библиотеке

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

по природе
алгоритмов оптимизации, с
целью создания диалогового

алгоритм
а

ф
ильтрации эффективного множества
для выбора приближенно
-
оптимального решения
.

На стадии окончания разработки программног
о обеспечения

были
вычислены затраты на проектирование

данного продукта
с целью
установления рыночной стоимости. Можно отметить, что
раз
работанная
система
выгодно отличается тем, что организация, инвестировав в нее один
раз, имеет возможность многократной разработки ПО, основанного на базе
уже имеющихся приложений. В данном случае, затрачиваемые ресурсы
вполне могут быть покрыты доходом от

продажи системы, в силу её
актуальности и рентабельности. В связи с этим, построение, внедрение и
65


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

66


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

1.

C
# 2PP5 и платформа .

S.P для профессионалов. / Б. Ивьен, Д. Глинн, К.
Нейгел и др. / Пер. с англ.


М.: ООО И. Д. Вильямс», 2PP8. 179P с.

2.

Хайнеман Р. Визуальное моделирование электронных схем в PSPICE: Пер.
с нем.
-

М.: ДМК Пресс, 2PP8.
-

SS6 с: ил.

3.

Разработка распределенны
х приложений на платформе
Microsoft

.

Framework
. / С. Морган, Б. Райян, Ш. Хорн, М. Бломсма. / Пер. с англ. М.:
Русская редакция: Питер, 2PP8. 6P8 с.

4.

Духовников Д.С., Никулина В.С., Семиглазова Я.О. Методы разработки
сервис
-
ориентированных систем обуче
ния на основе веб
-
сервисов. /
Современное образование: содержание, технологии, качество. Материалы
XX
III международной науч.
-
метод. конф., СПб, 21 апр. 2P17 г. / СПбГЭТУ
ЛЭТИ», СПб, 2P17, С.

161

163.

5.

Оптимизация приложений на платформе .NET. / Голдштейн
С., Зурбалев Д.,
Флатов И. и др. / Пер. с англ. Киселев А. Н.
-

М.: ДМК Пресс, 2P14. 524 с.

6.

Анисимов В.И.
,
Дмитревич Г.Д.
,
Ежов С.Н.

Автоматизация
схемотехнического проектирования на мини
-
ЭВМ: учебное пособие.
Ленинград: Изд
-
во Ленинградского университета, 198S. 199 с.

7.

Диалоговые системы схемотехнического проектирования. / Анисимов В.И.,
Дмитревич Г.Д., Скобельцын К.
Б. и др. М.: Радио и связь, 1988. 288 с.

8.


Норенков И.П. Основы автоматизированного проектирования: учеб. для
вузов


4
-
е изд. Изд
-
во МГТУ им. Н.Э. Баумана, 2PP9. 4SP с.

9.

Методические указания по выполнению дополнительного раздела
Разработка и стандартизация

программных средств при выполнении
выпускной квалификационной работы / сост.: В.И. Фомин. СПб.: Изд
-
во
СПбГЭТУ ЛЭТИ», 2P15. S5 с.

10.


Программирование методов оптимизации: Методические указания к
лабораторным работам / Сост.: Г. Д. Дмитревич, А. И. Ларистов
, В. А.
Павлушин. СПб.: Изд
-
во СПбГЭТУ ЛЭТИ», 2PP4.

67


11.


Практикум по курсу Методы оптимизации» / Сост.: Г. Д. Дмитревич.
СПб.: Изд
-
во СПбГЭТ
У ЛЭТИ», 2P16
.

12.


OrCAD

PSpice

Optimizer
:
User

s

Guide

/
Beaverton
, 2008.
P. 174.

13.


Роберт Хайнеман. Моделирование работы электронных схем:
PSpice
.
Москва: Изд
-
во
ДМК, 2PP5, S18 с.

14.


Разевиг В.Д. Схемотехническое моделирование с помощью
Micro
-
Cap

7.
Москва: Изд
-
во Горячая линия
-
Телеком, 2PPS. S86 с.

15.


Антипенский Р. В., Фадин А.Г.

Схемотехн
ическое проектирование и
моделирование радиоэлектронных устройств. Москва: Изд
-
во Техносфера,
2PP7. 128 с.


16.

ГОСТ 7.S2

2001.
Система стандартов по информации, библиотечному и
издательскому делу. Отчет о научно
-
исследовательской работе. Структура
и правила о
формления
.
Минск: Межгос. Совет по стандартизации,
метрологии и сертификации
, 2PP1. 21 с.

68


ПРИЛОЖЕНИЕ

А

Код

программы

internal

class

Vectors

:
IComparable

Vectors



{


#region

Constructors.


public

Vectors(
double
[] vector)


{


Vector = vector;


}



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Пустой вектор, размерностью i.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors(
int

i)


{


Vector =
new

double
[i];


for

(
int

j = 0; j i; j++) Vector[j] = 0;


}



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Коснтруктор, инициализирущий вектор посредством другого вектора.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors(
Vectors

vector)


{


this
.Vector =
new

double
[vector.Size];


for

(
int

i = 0; i vector.Size; i++)


{


this
.Vector[i] = vector[i];


}


}



///

summarysu;&#x-3m1;ma1;�ry-; 


///

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


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors(
string

textVector)


{


if

(textVector.Contains(
"."
)) textVector = textVector.Replace(
"."
,
","
);


var

newVector = textVector.Split(
' '
);


Vector =
new

double
[newVector.Length];


for

(
int

i = 0; i newVector.Length; i++)


{


Vector[i] =
Convert
.ToDouble(newVector[i]);


}


}


#endregion



#region

Properties


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Длина

вектора
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

int

Size �= Vector.Length;


#endregion



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Значение ячейки вектора.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

double

this
[
int

index]


{



{
return

Vector[index]; }
///

Аксессор для получения данных



{ Vector[index] =
value
; }
///

Аксессор для установки данных


}



public

int

CompareTo(
Vectors

other)


{


//if (Function == null) throw new ArgumentException("
Не

зада

исследуемая

функция
.");





}


internal

double

FitnessFunction()


{


var

rezult =
new

Vectors
(StartPoint.Size);


var

valueFitnessFunction = 0.0;

69



for

(
int

i = 0; i StartPoint.Size; i++)


{


rezult[i] =
this
[i] * (EndPoint[i]
-

StartPoint[i]) / (
Math
.Pow(2,
BitsCount)
-

1) +
StartPoint[i];


}



// Изменение файла схемы ".net", для далнейшего получения массива точек.


PSpiceControl
.ReplacingDataFile(
"C:
\
\
Programs
\
\
OrCAD_Demo
\
\
PSpice
\
\
, rezult[0]);



// Запуск

симуляции PSpice, после работы сформирован файл ".out".


var

startInfo =
new

ProcessStartInfo
(
@"C:
\
Programs
\
OrCAD_Demo
\
PSpice
\
pspice.exe"
)


{


Arguments =
"/R /E C:
\
\
Programs
\
\
OrCAD_Demo
\
\
PSpice
\
\
A3.cir"
,


CreateNoWindow =
true




};



var

proc =
new

Process

{ StartInfo = startInfo };





proc.Start();


proc.WaitForExit();


//
--------------------------------------------------------------------------------------



var

receivedArrayValues =
PSpiceControl
.GetArrayFrequencyResponsePoints(
"C:
\
\
Programs
\
\
OrCAD_Demo
\
\
PSpice
\
\
A3.out"
);



// ReSharper disable
once InvertIf


if

(ValueDesiredFrequencyFunction.Length == receivedArrayValues.Length)


{


// ReSharper disable once LoopCanBeConvertedToQuery


for

(
int

i = 0; i ValueDesiredFrequencyFunction.Length; i+
+)


{


valueFitnessFunction +=
Math
.Pow(2, ValueDesiredFrequencyFunction[i]
-

receivedArrayValues[i]);


}


}



//return 1 / (Math.Pow(2, valueFitnessFunction) + 1);



v
alueFitnessFunction;


}



///


summary



///

Строковое

представление

вектора
.


///

/
summary



public

override

string

ToString()


{


string

vector =
""
;


for

(
int

i = 0; i Size
-

1; i++) vector +=
this
[i] +
" : "
;


vector +=
this
[Size
-

1];



vector;


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

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


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors

ToReal()


{


var

realVector =
new

Vectors
(Size);


for

(
int

i = 0; i Size; i++)


{


realVector[i] =
this
[i] * (EndPoint[i]
-

StartPoint[i]) / (
Math
.Pow(2, BitsCount)
-

1) +
StartPoint[i];


}



realVector;


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Вектор
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


internal

double
[] Vector {
get
; }



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Путь к файлу с описанием схемы (.net).


///

/summary/s;&#x-3u1;mm1; r-;y13;


internal

string

NetFileName {
get
;
set
; }



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Начальная

точка
.

70



///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

Vectors

StartPoint {
get
;
; }



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Конечная

точка
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

Vectors

EndPoint {
get
;
set
; }



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Количество разрядов для целочисленной кодировки.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

byte

BitsCount {
;
; }


}


internal

class

GA


{


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Размер

популяции
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

int

SizePopulation {
get
;
; } = 50;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Разрыв

поколений
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

double

BreakGeneration {
;
set
; }


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, которое возвращает true если разрыв поколений включен.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

IsBreakGeneration �= (BreakGeneration� 0);


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, остелживающее, на существование вырожденной популяции.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

DegenerationTrack {
;
set
; } =
false
;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, контролирующее, включено ли уплотнение сетки.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

PopulationMeshSeal {
;
; } =
false
;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Переменная
-
счетчик, для подсчета количества вырождений.


///

/summary/s;&#x-3u1;mm1; r-;y13;


private

static

int

DegenerationCount {
;
set
; } = 0;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, контролирующее, включен ли популяционный всплеск.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

PopulationSpike {
;
; } =
false
;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Размер

турнира
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

int

TournamentSize {
get
;
; }



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Максимальное количество итераций.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

int

MaximumIterations {
get
;
; } = 50;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Вероятность

скрещивания
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

double

CrossingProbability {
;
set
; }


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Вероятность

мутации
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

double

MutationProbability {
;
set
; }
=
-
1;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, которое возвращает true если мутация включена.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

OnMutation =� (MutationProbability� 0);


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Вероятность

инверсии
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

double

InversionProbability {
get
;
; } =
-
1;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Свойство, которое возвращает true если инверсия включена.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

bool

OnInversion =� (InversionProbability � 0);


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Переменная для генерации случайного числа из заданного промежутка.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

Random

RandomNumber {
; } =
new

Random
();

71



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Битовая

мутация
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


private

static

Vectors

MutationBit(
Vectors

child)


{


var

mutantChild = child;
//
Ребенок

мутант
.


for

(
int

i = 0; i child.Size; i++)


{


for

(
int

j = 0; j
Vectors
.BitsCount; j++)


{


if

(MutationProbability� RandomNumber.NextDouble())


{


int

swapMask = 1 j;


mutantChild[i] =
Convert
.ToI
nt32(mutantChild[i]) ^ swapMask;


}


}


}



mutantChild;


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Битовая

инверсия
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


private

static

Vectors

InversionBit(
Vectors

child)


{


var

mutantChild = child;
//
Ребенок

мутант
.


for

(
int

i = 0; i child.Size; i++)


{


for

(
int

j = 0; j
Vectors
.BitsCount; j++)


{


if

(InversionProbability � RandomNumber.NextDouble())


{


int

swapMask = 1 j;


mutantChild[i] =
Convert
.ToInt32(mutantChild[i]) ^ swapMask;


}


}


}



mutantChild;


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Одноточечное скрещивание для целочисленного кодирования.


///

/summary/s;&#x-3u1;mm1; r-;y13;


private

static

IEnumerable

Vectors
� CrossingIntegerOnePoint(
Vectors

parent1,
Vectors

parent2)


{


var

check =
false
;


var

children =
new

List

Vectors
�();



//
Этап

скрещивания
.


for

(
int

i = 0; i parent1.Size; i++)


{


// ReSharper disable once InvertIf


if

(CrossingProbability � RandomNumber.NextDouble())


{


check =
true
;


var

mask = (1 RandomNumber.Next(
Vectors
.BitsCount))
-

1;


var

swapMask = (
Convert
.ToInt32(par
ent1[i]) ^
Convert
.ToInt32(parent2[i])) & mask;


parent1[i] =
Convert
.ToInt32(parent1[i]) ^ swapMask;


parent2[i] =
Convert
.ToInt32(parent2[i]) ^ swapMask;


}


}


//
Этап

мутации
.


if

(check && OnMutation)


{


parent1 = MutationBit(parent1);


parent2 = MutationBit(parent2);


}


if

(OnInversion)


{


parent1 = InversionBit(parent1);


parent2 = InversionBit(parent2);


}


children.Add(parent1);


children.Add(parent2);



children
;


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Генетический алгоритм, для целочисленного кодирования.


///

/summary/s;&#x-3u1;mm1; r-;y13;

72



public

static

Vectors

GeneticAlgoritmInteger(
Population

population)


{


var

k = 0;


var

temporaryPopulation =
new

List

Vectors
�();
//
Временная

популяция
.


var

controlPopulation = population;
// Популяция родителей/отобранных особей.


//кregion Запись данных для анализа


//Data.MinValues.Add(controlPopulation.Min.FitnessFunction);


//Data.MiddleValues.Add(controlPopulation.Max.FitnessFunction
-

controlPopulation.Min.FitnessFunction);


//#endregion


while

(k++ MaximumIterations)


{


controlPopulation = controlPopulation.GetParentPool(TournamentSize);


#region

Если популяционный всплеск включен


if

(PopulationSpike)


{


if

(controlPopulation.Max.FitnessFunction()
-

controlPopulation.Min.FitnessFunction()
0.01) DegenerationCount++;


if

(DegenerationCount � 3) controlPopulation.PopulationSpike();


}


#endregion


#region

Если

уплотнение

сетки

включено


if

(PopulationMeshSeal)


{


if

(k � MaximumIterations * 0.6)
Vectors
.BitsCount = 32;


}


#endregion



//if

(controlPopulation.Max.FitnessFunction()
-

controlPopulation.Min.FitnessFunction()
0.01) { DegenerationTrack = true; }



if

(IsBreakGeneration)


{


var

size =
Convert
.ToInt32((1
-

BreakGeneration) * controlPopulation.Count) % 2 == 0 ?
Convert
.ToInt32((1
-

BreakGeneration) * controlPopulation.Count) :
Convert
.ToInt32((1
-

BreakGeneration) *
controlPopulation.Count) + 1;



controlPopulation.Sort();




for

(
int

i = 0; i size; i++)


{


temporaryPopulation.Add(controlPopulation[i]);


}


}



while

(temporaryPopulation.Count != controlPopulation.Count)


{



foreach

(
var

item
in

CrossingIntegerOnePoint(controlPopulation.RandomSelection,
controlPopulation.RandomSelection))


{



temporaryPopulation.Add(item);


if

(temporaryPopulation.Count == controlPopulation.Count)


{


break
;


}


}


}



controlPopulation =
new

Population
(temporaryPopulation);


temporaryPopulation.Clear();


}


var

min =
new

Vectors
(controlPopulation.Min);


controlPopulation =
null
;



min.ToReal();


}


}

internal

class

Population


{


#region

Constructors.


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Конструктор, который инициализирует особи, принимая набор особей.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Population(
IEnumerable

Vectors
� population)


{


this
.population =
new

List

Vectors
�(population);

73



}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Умный коснтруктор, который создает популяцию с вещественным/целочисленным кодированием.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Population(
int

sizePopulation)


{


population =
new

List

Vectors
�();


//
Целочисленное

кодирование
------------------------------------------------------------------
---------------------------------


for

(
int

i = 0; i sizePopulat
ion; i++)


{


var

individ =
new

Vectors
(
Vectors
.StartPoint.Size);


for

(
int

j = 0; j
Vectors
.StartPoint.Size; j++)


{


individ[j] = RandomNumber.Next(1
Vectors
.BitsCount);


}


population.Add(individ);


}


}


#endregion


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Функция, которая возвращает родительский отобранный из текущей популяции. В

качестве

аргумента

принимается

размер

турнира
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


internal

Population

GetParentPool(
int

tournamentSize)


{


var

parentPool =
new

List

Vectors
�();


for

(
int

i = 0; i Count; i++)


{


parentPool.Add(
new

Vectors
((TournamentSelection(tournamentSize))));


}



new

Population
(parentPool);


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Турнирная

селекция
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


///

param name="
tournamentSize
�"
Размер

турнира
.
/param&#x/10p; -3r;ĺm;&#x-300;


///



private

Vectors

TournamentSelection(
int

tournamentSize)


{


var

selectedIndividuals =
new

Vectors
[tournamentSize];
//
Массив
,
который

хранит

отобранные

особи
.


for

(
int

i = 0; i tournamentSize; i++)


{


selectedIndividuals[i] = population[RandomNumber.Next(Count)];


}



selectedIndividuals.Min();


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Оператор

популяционного

всплеска

популяции
.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

void

PopulationSpike(
double

partPopulation = 0.6)


{


int

countNewIndivid =
Convert
.ToInt32(partPopulation * Count);


for

(
int

i = countNewIndivid; i� 0; i
--
)


{


var

individ =
new

Vectors
(
Vectors
.StartPoint.Size);


for

(
int

j = 0; j
Vectors
.StartPoint.Size; j++)


{


individ[j] = RandomNumber.Next(1
Vectors
.BitsCount);


}


this
[RandomNumber.Next(Count)] = individ;


}


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Возвращает случайную особь из популяции.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors

RandomSelection =�
this
[RandomNumber.Next(Count)];



///

summarysu;&#x-3m1;ma1;�ry-; 


///

Сортирует заданную популяцию в порядке ворастания.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

void

Sort() �= population.Sort();


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Возвращает или задает значение отдельной особи.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors

this
[
int

index]

74



{



{
return

population[index]; }



{ population[index] =
value
; }


}


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Переменная для генерации случайного числа из заданного промежутка.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

static

Random

RandomNumber =
new

Random
();


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Класс реализующий популяцию, как набор особей.


///

/summary/s;&#x-3u1;mm1; r-;y13;


private

List

Vectors
� population {
get
;
; }


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Получает число особей, содержащихся в популяции.


///

/summary/s;&#x-3u1;mm1; r-;y13;


internal

int

Count �= population.Count;


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Возвращает особь с максимальным значением.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors

Max �= population.Max();


///

summarysu;&#x-3m1;ma1;�ry-; 


///

Возвращает особь с минимальным значением.


///

/summary/s;&#x-3u1;mm1; r-;y13;


public

Vectors

Min �= population.Min();


}


Приложенные файлы

  • pdf 9243103
    Размер файла: 2 MB Загрузок: 0

Добавить комментарий