Реферат по предмету "Экология"


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

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯКЕМЕРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТМатематический факультет
КафедраВычислительной математики
ДИПЛОМНАЯ РАБОТА
Разработка программного модуля для нахожденияоптимальных предельно-допустимых выбросов в атмосферу от группы источников
студента 5 курса
Гурова Павла Владимировича
Кемерово 2009
ОГЛАВЛЕНИЕ
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
1. Существующая системаустановления ПДВ для промышленных источников
1.1Нормативы и показатели загрязнения атмосферы.
1.2 Данныеоб источниках загрязнения атмосферы.
1.3Метеопараметры
1.4 Данныенаблюдений за загрязнением атмосферы
1.5 Моделирасчета загрязнения атмосферы
1.6Унифицированные программы расчета загрязнения атмосферы
1.7 МетодЫравного квотирования и МРН-87
2. Симплекс-метод
2.1 Общаяхарактеристика симплекс метода
2.2 Алгоритмсимплекс метода (первая симплекс таблица)
3. Формализация поставленной задачи
4. Программная реализация и примерпрактического применения
4.1 Выбор загрязняющих веществ
4.2 Обработка точек с повышеннымзагрязнением
4.3 Обработка источников
4.4 Обработка таблиц влиянияисточников на точки
4.5 Применении симплекс-метода
4.6 Вывод полученных результатов
4.7 Сравнение различных методоврасчета ПДВ для реального предприятия
Заключение
Список литературы
Вспомогательные указатели
Перечень сокращений
Приложения
Unit1.pas
Simplex.pas
ВВЕДЕНИЕ
В нашей стране существуетгосударственная система управления выбросами промышленных источников загрязненияатмосферы (ИЗА) [1-4]. Целью системы является достижение и поддержание на нормативномуровне N загрязнения воздушного бассейна населенных мест, котороехарактеризуется приземной разовой (осредненной за 20 минут) концентрацией С.
Основными разделамиданной системы является проведение воздухоохранной экспертизы вновь строящихсяобъектов и установление предельно допустимых норм (ПДВ) для существующихобъектов.
В этих задачах расчетнымпутем устанавливается связь между выбросами Q предприятий и приземнымиконцентрациями C загрязняющих веществ (ЗВ), выбрасываемыми промышленнымиисточниками.
Для расчета концентраций Спо известным значениям Q и характерным для данной территории метеопараметрамиспользуется единая, утвержденная на государственном уровне методика ОНД-86 [2].
В настоящее времяпроектные расчеты осуществляются с использованием программных комплексов (ПК)сертифицированных главной геофизической обсерваторией им. А.И. Войекова (г.Санкт-Петербург).
При проведенииатмосферноохранной экспертизы проекта нового предприятия, решается прямаязадача моделирования загрязнения атмосферы.
При установлении ПДВ длясуществующего предприятия, решается обратная задача – подбираются такиезначения выбросов Х, при которых в прилегающих к предприятию жилых районах приземныеконцентрации С не превышают санитарную норму N.
В соответствии с нормативнымидокументами по нахождения ПДВ [1,4] в этом случае обратная задача решается путемподбора реальных (технологически применимых) для данного производства атмосфероохранныхмероприятий (АОМ), таких как замена оборудования, установка газоочистки и т.д.Фактически, обратная задача решается при этом методом подбора. Однако прибольшом числе источников большую помощь в выборе первоочередных мероприятийдает решение задачи форматизированными методами. Пользуясь линейностью моделиОНД-86 по выбросам источников можно представить загрязнение атмосферы вконтрольных точках жилой зоны в виде линейной формы:
/>,
где /> — концентрация в i-ойточке, />-выброс j-го источника, /> — вклад j-го источника вi-й точке, который в дальнейшем будем называть коэффициентом влияния.
Санитарные требованияприводят к системе линейных неравенств:
/>,
решение которой ищется наинтервале
/>,
где /> — технологическиобоснованный минимум выброса j-го источника.
На сегодняшний день вметодической литературе описаны два метода нахождения решения поставленнойзадачи: МРН-87 [24] и метод равного квотирования [25]. Оба метода дают частноерешение поставленной системы неравенств из соображений удобства нахожденияединственного решения. Однако любое предприятие заинтересовано в минимальныхзатратах, необходимых для установления нормативных выбросов />. Для этой цели, кпоставленной системе неравенств добавляем целевую функцию:
/>,
где в общем случае /> — стоимостьснижения на единицу выброса для j-го источника. В данном виде решение Xj дает минимум затрат на достижениенормативного загрязнения атмосферы.
В предположении />получаем
/>,
что эквивалентно />.
Следовательно, задачасводится к поиску максимально допустимого по сумме сочетания выбросов Xj данного предприятия, позволяющегодостичь нормативного загрязнения атмосферы. В связи с линейностью модели ОНД-86по отношению к выбросам для поиска решения поставленной задачи может бытьприменён симплекс-метод.
Целью настоящей работыявляется разработка программного модуля для расчета оптимальных значений ПДВ сиспользованием симплекс-метода. Данный модуль должен не просто реализоватьрешение задачи линейного программирования, но и быть интегрирован в средупрограммного комплекса ЭРА-ВОЗДУХ, который предназначен для решения проектныхзадач, использует стандартизированные данные об источниках выбросов,метеорологических параметрах распространения примесей и выдает выходнуюинформацию в установленной нормативными документами форме (подробности на сайтеwww.logos-plus.ru). После разработки и отладки модуляв работе предполагается решить задачу на основе реальных данных и сравнитьоптимальное решение с методами, описанными в методической литературе.

1. Существующая системаустановления ПДВ для промышленных источников1.1 Нормативы и показатели загрязнения атмосферы
Основными нормативамичистоты атмосферы, лимитирующими загрязнение (следовательно и выбросы ИЗА),являются предельно допустимые концентрации (ПДК) для населенных мест, которыеподразделяются на среднесуточные (ПДКс — длительных периодов воздействия) имаксимально-разовые (ПДКр — 20-ти минутного осреднения) [6,7,8]. Такие ПДКотражают критерии качества воздуха для человека (гигиенические). В документах[1,5] при определении допустимых выбросов в атмосферу предусмотрен учет ПДК длярастительности, животного мира, сельхозугодий и т.д. (экологические) с выборомв качестве определяющей наиболее жесткой величины. Однако пока утвержденныекакими-либо нормативными документами экологические ПДК отсутствуют [1], ауправление выбросами ведется с ориентацией только на гигиенические ПДК.
ПДКс имеетцель предупреждение хронического воздействия ЗВ при длительном вдыхании.Концентрация ЗВ в пределах ПДКс не должна оказывать на человека прямого иликосвенного воздействия при неограниченно продолжительном вдыхании. Поэтому игигиенистами [9] и специалистами по атмосферной диффузии [10] отмечается, чтоПДКс, несмотря на название, можно использовать для таких времен осреднения, какгод или сезон. Список ПДКсдополняют максимально разовые предельнодопустимые концентрации (ПДКр), при установлении которых учитываетсярефлекторное воздействие. В случае отсутствия какого-либо ПДК используетсяуравнение ПДКр=10ПДКс. Для ряда ЗВ, по которым пока не определены нормативыПДК, расчетным путем установлены ориентировочно безопасные уровни воздействия(ОБУВ), используемые в качестве ПДКр. На сегодняшний день в перечне [7] около3000 веществ имеющих какой-либо норматив ПДК. В нашей стране в качествеосновной размерности ПДК принят мг/м3.
Рассмотрениесписка ПДК показывает, что отношение ПДКр/ПДКслежит в интервале от1 до 20.
Наличие ПДК,регламентирующих как длительное, так и кратковременное воздействие ЗВ наздоровье человека, свидетельствует, что показателями загрязнения атмосферынаселенных мест должны являться концентрации, согласованные с ПДКс и ПДКр повремени осреднения. Таким образом, названными показателями будут среднегодоваяСг и разовая С концентрации, периодами осреднения которых являются год и 20минут соответственно.
В настоящеевремя, согласно [1], считается, что чистота ВБ населенных мест для некоторогоЗВ соответствует нормативной, если на границах санитарно-защитных зонпредприятий и в пределах жилой зоны выполняется неравенство
См
где См–максимальная суммарная концентрация данного ЗВ; m = 0.8 для особо охраняемых территорий и m = 1.0 в остальных случаях. К особоохраняемым территориям относятся места массового отдыха населения (подробно см.[16]) и территории размещения лечебно-профилактических учреждений длительногопребывания больных и центров реабилитации. В качестве См берется вычисленная по[2] суммарная от всех источников концентрация, достигающаяся принеблагоприятном сочетании метеорологических условий (МУ) и параметрах выбросовИЗА данного ЗВ. Однако, как отмечается в [10], “при планировании долгосрочныхАОМ часто невозможно или экономически нецелесообразно предусматривать, чтобыабсолютно ни при каких МУ концентрации примесей не превышали ПДКр. Обычнооказывается достаточным учесть часто наблюдаемые неблагоприятные МУ, а напериоды особо опасных аномальных МУ вводить в действие оперативные АОМ”.Поэтому в неравенстве (1.1) под См подразумевается не абсолютныймаксимум, а разовая концентрация при так называемых “нормальных неблагоприятныхметеоусловиях”. Частота появления МУ, способных вызвать большее загрязнение ВБ(называемых “аномальными, неблагоприятными”) при тех же уровнях выбросовзависит от метеорологического режима района расположения предприятий [10]
Отсутствие в нормативных указаниях[1] аналогичного (1.1) неравенства для годового осреднения
Сг
объясняетсятем, что если (1.1) выполняется, то (1.2) для того же ЗВ будет следоватьавтоматически. Действительно, отношение ПДКр/ПДКс за редким исключением непревосходит 10, в то врем как отношение См/Сг числом из интервала от 25 до 40[10]. Однако этот интервал относится прежде всего к случаю изолированного илигруппы близко расположенных ИЗА. В крупном промышленном городе, при наличиибольшого числа распределенных по территории и различных по типу источников,нижняя граница указанного интервала существенно снижается. Оценки отношения См/Сгна основе статистического анализа результатов стационарных наблюдений вразличных городах России рассматриваются в работах Э.Ю.Безуглой [11,12]. Фактическиесоотношения между См/Сг для серистого ангидрида, полученные по даннымрегулярных наблюдений на 863 стационарных постах, расположенных в городахРоссии показывают, что нормирование выбросов по разовым концентрациям в 30%случаев не обеспечит соблюдение (1.2). Кроме того, следует подчеркнуть, чтоопределение риска от загрязнения атмосферы для здоровья населения основаноименно на долгопериодных концентрациях ЗВ. Отсюда следует, что в общем случаеследует предусматривать проверку обеих условий (1.1) и (1.2).
С начала 90-х годов всостав нормативных данных по загрязняющим веществам добавились базовые удельныестоимостные показатели [19] по выбросам каждого ЗВ за превышение нормативовпредельно допустимых выбросов (ПДВ). Под ПДВ для предприятия понимается такаясовокупность выбросов его ИЗА [1,3,4,5], при которой (с учетом фоновогозагрязнения атмосферы от других предприятий) соблюдается условие (1.1). Завыброс в пределах установленного проектом нормативов ПДВ лимита предприятиеплатит базовый норматив (руб/тонну в год), а за превышение – в пятикратномразмере. Кроме того, начисляемая плата умножается на коэффициент экологическойситуации (территориальный показатель, от 1.0 до 1.44) и коэффициент индексации.Для примера можно сказать, что годовая плата бытовой котельной может составлятьот нескольких тысяч до нескольких десятков тысяч рублей, а крупного химическогоили металлургического предприятия достигает нескольких миллионов.
Здесь хотелось бы еще разподчеркнуть, что при разработке проекта норм ПДВ условие (1.1) проверяется расчетнымпутем на основе данных о выбросах ИЗА с использованием методики ОНД-86 [2].Следовательно, и плата за выброс зависит от локальной модели расчетазагрязнения атмосферы, которая нормативно утверждена на федеральном уровне. Каки любая (а тем более — инженерная) модель столь сложного явления какатмосферная диффузия, она не описывает всех природных закономерностей и можетдопускать значительные погрешности. Тем не менее данная проблема в нормативныхработах не обсуждается, поскольку в разрешении финансовых вопросов обязательнотребуется ссылка на законодательно утвержденный документ, которым и являетсяОНД-86. 1.2 Данные об источниках загрязнения атмосферы
Естественно, важнейшейинформацией для управления выбросами промышленных предприятий являютсяпараметры их ИЗА. Существует ориентированная на данные цели система сбора ихранения такой информации на государственном уровне. При постановке многихнаучных и экспертных задач, не входящих в перечень нормативных проектныхпроработок, исследователями явно или неявно предполагается, что названнаясистема обеспечивает (или обеспечит в ближайшем будущем) представлениеинформации об ИЗА в необходимом пространственном и временном разрешении и стребуемой для поставленной задачи точностью. В этой связи представляетсяинтересным рассмотреть информацию об ИЗА и те ограничения которые должныучитываться не только при постановке, но и при решения исследовательских задачприменительно к реальным объектам промышленных городов или регионов.
Источник загрязненияатмосферы (ИЗА) представляет собой хозяйственное сооружение или естественныйобъект, из которого в атмосферу поступают ЗВ. К источнику загрязнения, какправило, относится один или несколько источников выделения, которыми называютсяпромышленные установки, генерирующие ЗВ в процессе работы (например,водогрейный котел есть источник выделения, а труба – источник загрязнения).
Нормативная информация опараметрах ИЗА представляется предприятиями в природоохранные органы на основепроведения инвентаризации. В Федеральный Закон «Об охране атмосферноговоздуха» [5] впервые (в сравнении с ранее действовавшим Законом) введенастатья, касающаяся инвентаризации выбросов ЗВ в атмосферный воздух. Всоответствии со статьей 22 Закона “юридические лица, имеющие источники выбросовЗВ в атмосферный воздух, проводят инвентаризацию выбросов вредных(загрязняющих) веществ в атмосферный воздух и их источников в порядке,определенном специально уполномоченным федеральным органом исполнительнойвласти в области охраны атмосферного воздуха» (в настоящее время — РостехнадзорРФ). Инвентаризацию проводят все действующие предприятия, организации,учреждения независимо от их организационно-правовых форм и форм собственности,производственная деятельность которых связана с выбросом ЗВ в атмосферу.Ответственность за полноту и достоверность данных инвентаризации несетпредприятие (в лице руководителя). Инвентаризация выбросов (т.е. представлениеинформации с точностью до каждого ИЗА) проводится 1 раз в 5 лет [1, 15]. Крометого, ежегодно предприятия отчитываются по форме государственного статистическогонаблюдения № 2-тп (воздух), которая содержит сведения только о годовых выбросахпредприятия в сумме по всем источникам.
Определение параметровисточников загрязнения атмосферы (ИЗА) для проекта нормативов ПДВ должноосуществляться при регламентных загрузке и условиях эксплуатациитехнологического и пыле-, газоочистного оборудования. В соответствие с новымитребованиями [1], параметры ИЗА следует фиксировать и на основных режимахработы технологического оборудования (установки) и различных стадиях технологическихпроцессов. Однако в настоящее время для подавляющего большинства предприятийтакая информация отсутствует, и данные о выбросах представлены только длямаксимальной регламентной нагрузки установок (максимальные разовые выбросы,г/сек) и в целом за год (годовые или валовые выбросы, т/год).
Для определенияколичественных и качественных характеристик выделений и выбросов загрязняющихвеществ (3В) в атмосферу используются инструментальные и расчетные (балансовые,а также основанные на удельных технологических нормативах или закономерностяхпротекания физико-химических процессов) методы [1]. К расчетным методам, какправило, относятся расчетно-аналитические методы, в которых в качествепараметров расчетных формул для определения величин выброса (г/с) используютсязначения многократно измеренных концентраций вредных веществ (мг/м3)в атмосферном воздухе для типовых источников выделения. Выбор методовопределения количественных и качественных характеристик выделений и выбросов 3Вв атмосферу зависит, в первуюочередь, oт характера производства и типаисточника.
Инструментальные методыявляются превалирующими для ИЗА с организованным выбросов ЗВ в атмосферу(организованные источники), к которым, в основном, относятся:
·         дымовые ивентиляционные трубы, вентиляционные шахты;
·         аэрационныефонари;
·         дефлекторы.
Расчетные методыприменяются, в основном, для определения характеристик источников снеорганизованными выделениями (выбросами). К ним относятся:
·         неплотностиоборудования (в т.ч. работающего при избыточном давлении);
·         погрузочно-разгрузочныеработы;
·         открытое хранениесырья, материалов и отходов;
·         оборудование итехнологические процессы как в производственных помещениях, не оснащенныхвентиляционными установками, так и расположенные на открытом воздухе (например,передвижные сварочные посты, резервуары хранения нефтепродуктов и т.д.);
·         пруды-отстойникии накопители, нефтеловушки, шлако- и хвостохранилища, открытые поверхностииспарения и т.п.; взрывные работы; открытые стоянки автотранспорта;
·         передвижныеисточники, эксплуатируемые на производственной территории (автотранспорт,тепловозы, дорожная и строительная техника, речные суда и т.п.).
При этом, как подчеркивается в [1], могут использоватьсятолько методики, рекомендованные к применению в установленном порядке перечнем[13] или документами, дополняющими и корректирующими этот перечень.
В настоящеевремя данные инвентаризации содержат сведения о типе источника, координатах (x1,y1), (x2,y2) [м] его расположения на плоскойкарте (схеме) местности, высоте выброса H [м], геометрии выходного канала D[м]. Кроме того, указывается выбрасываемый в единицу времени объем Vg [м3/сек](или вертикальная скорость Wo[м/сек])газовоздушной смеси, ее температура Tg [оС], показатели разовоговыброса Qi [г/сек] и суммарного за год(валового) выброса Qгi[т/год], i=1,…,I, где I — число выбрасываемых в атмосферу ЗВ.
Источники потипу подразделяются на точечные, линейные и площадные. Для точечного источника(x2,y2)=0. Линейные представляются прямолинейными отрезками конечнойдлины, при этом (x1,y1), (x2,y2) естькоординаты концов отрезка. Площадные описываются прямоугольником с центром вточке (x1,y1) и длиной сторон (x2,y2). Для площадного ИЗА указываетсяострый угол, отсчитываемый против часовой стрелки от оси x до x2. В качестве показателей выбросов Qi и Qгi длялинейных и площадных источников указываются суммарные значения, чтопредполагает равномерное выделение с единицы длины или площади. Источникипроизвольной формы приближаются набором отрезков или прямоугольников.Аналогично приближаются источники с неравномерным выбросом по протяженности илиплощади.
По величине погрешностиданные об источниках можно разделить на две группы. Первая — характеристикиисточника как сооружения (высота H, диаметр D) и координаты его расположения натерритории. Измерение таких данных осуществляется достаточно просто, взависимости от потребностей задачи они могут быть легко уточнены и изменяютсятолько при коренной перестройки промышленного предприятия. Поэтому припостановке задач можно предполагать, что перечисленные параметры ИЗА, взятые порезультатам инвентаризации, заданы с малой погрешностью даже для локальныхзадач переноса аэрозолей. Вторая группа – характеристики условий и количествавыхода ЗВ из источника: Tg, Vg (Wo),Q. Температура выброса является весьма устойчивой величиной для однотипныхпромышленных установок и погрешность ее задания на превосходит 2-3% дляэнергетических установок и 10-15% для остальных промышленных ИЗА. Большейизменчивостью обладает объем Vg (или скорость Wo газо-воздушной смеси), которые по имеющимся оценкам можетизменяться для некоторых ИЗА в 2 раза. Такой важный параметр источника каквыбрасываемое количество ЗВ в единицу времени Q также обладает значительнойизменчивостью, и точность его получения весьма невысока. Реальные данные поконкретным предприятиям в большинстве случаев получают на основе расчетныхметодов, поэтому теоретически их погрешность неизвестна. На практике жеспециалисты оценивают ее величиной 50-100% для конкретных источников и 20% дляпредприятий в целом [20].
Из приведенного краткогорассмотрения следует, что нормативная информация о выбросах промышленныхпредприятий, представленная в инвентаризации, пригодна для моделированиямаксимального (причем без указания его наступления во времени) или среднего задостаточно длительный (сезон, год) период загрязнения атмосферы промышленнымиаэрозолями. Поскольку зависимость мощности разового выброса Q от времени неможет быть в масштабе города (региона) напрямую получена по данным инвентаризации,моделирование временного хода загрязнения с учетом зависимости выбросов отвремени может быть осуществлено лишь весьма приближенно, на основе косвенныхданных по суточной или сезонной производительности промышленных объектов.Исключения составляют случаи специальных экспериментов, во время которых ИЗАоборудуются измерительной аппаратурой для контроля выбросов. А посколькуколичество источников по многим ЗВ в промышленном городе измеряется сотнями, тоочевидно, что такие эксперименты реальны только для уникальных ЗВ, допускающихнадежные методы оперативного инструментального контроля и выбрасывающихся ватмосферу города незначительным числом ИЗА.
Можно также обоснованнополагать, что значения выбросов, полученные по данным инвентаризации в масштабегорода (региона), если и содержат ошибку, то систематическую. Это связано стем, что все выбросы получены на основе единообразных методов расчета, аслучайные ошибки с определенной надежностью фильтруются контролирующимиорганами на этапе приемки и согласования инвентаризации. Тем не менее, даже приналичии систематической ошибки данные инвентаризации остаются пригодными длясравнительного анализа воздействия различных объектов на загрязнение атмосферы.
Что касается постановки ирешения обратных задач по управлению выбросами в атмосферу, то тут следуетучитывать как высокую чувствительность решения таких задач к погрешностямисходных данных, так и ограниченные возможности ИЗА реальных предприятий пооперативному изменению выбросов. Большинство промышленных установок недопускают отклонений от регламентного режима. Остановка многих из них либовообще невозможна, либо сопровождается увеличением выбросов в атмосферу.Поэтому практическая ценность математических моделей (например — оптимизационных) оперативного управления разовыми выбросами весьма ограничена.А реальную пользу по планированию первоочередных АОМ могут принести моделиоптимального планирования долгосрочных АОМ, где в качестве управляемыхпараметров являются суммарные годовые и максимальные за год разовые выбросыИЗА. 1.3Метеопараметры
Состояние локальногозагрязнения приземного слоя воздуха существенно зависит от метеорологическихусловий. Хорошо известно, что при одних и тех же параметрах выбросов ИЗА, взависимости от метеоусловий, концентрация у земли может меняться на порядок иболее.
С точки зренияраспространения ЗВ в атмосфере метеоусловия подразделяются на нормальные ианомальные [10]. Нормальные характеризуются, прежде всего, наличием ярковыраженного среднего направления ветра. Таковыми в крупных городах являютсяусловия со скоростью ветра более 1-2 м/сек. При меньших скоростях (штиль илиблизкое к штилевому состояние) в результате рельефных особенностей итемпературной неоднородности подстилающей поверхности могут образовыватьсялокальные циркуляционные зоны, приводящие к накоплению ЗВ в слое дыхания[17,18]. Ситуация становится особенно опасной при наличии вертикальнойтемпературной инверсии, препятствующей уносу примеси в верхние слои атмосферы.Именно при таких метеоусловиях фиксируются максимальные уровни загрязнения приинструментальных наблюдениях.
Подразделениеметеоусловий на нормальные и аномальные играет важную роль для осознаниярезультатов инженерных расчетов загрязнения атмосферы. Дело в том, что все инженерныемодели применимы только при нормальных метеоусловиях, поскольку единоенаправление ветра и его стационарность являются их непременным условием.Поэтому расчетная «максимальная» концентрация является не абсолютныммаксимумом загрязнения, а наибольшей из концентраций для нормальных условий.Даже если предположить, что методика расчета и параметры выбросов полностьюсоответствуют происходящему в природе, то превышение расчетного максимума всеявляется равновозможным и зависит от частоты появления аномальныхнеблагоприятных метеоусловий.
В рамках любой локальнойстационарной модели наиболее важными с точки зрения рассеяния примесейметеорологическими параметрами являются скорость и направление ветра, а такжепоказатели диффузионной активности (устойчивости) атмосферы. Скорость инаправление ветра измеряются непосредственно. Обзор методов измерений скоростиветра показывает, что относительная погрешность составляет от 15% (прискоростях порядка 5 м/с) до 55% (при скорости порядка 1м/с) [26]. С точки зрениярешения задач переноса аэрозолей локального масштаба представляет интерес, чтопогрешности при определении направления ветра могут привести к ошибке положенияоси дымового факела на карте территории порядка 10-15%, в результате чего придостаточно устойчивой стратификации атмосферы факел просто не накроет расчетнуюточку и приведет к большой ошибке моделирования. Это следует учитывать приинтерпретации понятия «опасное направление ветра» и определенииосновных виновников загрязнения заданной точки города. Сказанное еще разподчеркивает, что на практике при решении краткосрочных задач нормированиявыбросов в смысле неравенства (1) представляет интерес предсказание с разумнойточностью максимума разовой концентрации даже без указания момента времени,когда это произойдет.1.4 Данные наблюдений за загрязнением атмосферы
При обосновании системы мониторингана территории России академик Ю.А. Израэль подчеркивает, что «толькорегулярные наблюдения в строго определенных местах и в строго установленныесроки являются источниками прямой и статистически обеспеченной информации озагрязнении окружающей среды»[23]. Такого рода наблюдения применительно кзагрязнению атмосферы осуществляются на сети стационарных постов Росгидромета вгородах. Посты расположены только в крупных городах. Например, в Кемеровскойобласти стационарные посты оборудованы в Новокузнецке (10), Кемерово (9) иБелово (1). Причем количество постов сокращается (в 90-х годах в Кемерово было12 постов). На постах ежедневно (в 7, 13 и 19 часов местного времени)осуществляются отборы проб воздуха, которые доставляются в лабораторию местногоподразделения Росгидромета, где анализируются стандартизированными методами.Контролируются только незначительное число наиболее распространенных ЗВ (10-20примесей), в то время как в данных инвентаризации совокупности предприятийкрупного промышленного города встречается на практике 100-200 веществ. Такимобразом, большинство ЗВ на сети не контролируется ничем, кроме интуицииразработчиков проектов и согласующих эти проекты экспертов.
Обзор методов инструментальногоанализа воздуха [21,22] показывает, что количественные оценки погрешностейразличных этапов лабораторных методов анализа полученных проб составляют 6-25%(с доверительной вероятностью 95%). 1.5 Моделирасчета загрязнения атмосферы
Даже при наличие данныхнаблюдений за загрязнением воздуха на сети стационарных постов, одной изважнейших наукоемких задач охраны атмосферы является расчет загрязнениязаданной территории по имеющимся данным о выбросах и условия распространенияпримесей. Действительно, оценить перспективный уровень загрязнения взависимости от варианта промышленного развития можно только расчетнымиметодами. Кроме того, методы инструментальных наблюдений в общем случае немогут указать вклад отдельного источника (предприятия) в измеряемую суммарнуювеличину, что необходимо при определении основных виновников загрязнения,установлении ПДВ и начислении платы за выброс. Поэтому моделирование загрязненияатмосферы необходимо как для анализа, так и для прогноза.
В предисловии к [17] А.М.Яглом подчеркивает, что расчет диффузии примеси в атмосфере «не может бытьсведен к какой-то задаче математической физики, а обязательно требует тех илииных нестрогих гипотез и приближенных допущений. По этой причине задача ораспространении примеси в атмосфере не имеет одного общепринятого ‘правильногорешения’, а характеризуется наличием целого ряда различных подходов ктребуемому расчету, ни один из которых не может претендовать на полнуюстрогость и точность».
Модели, естественно,можно классифицировать с различных точек зрения, и этому посвящена весьмаобширная литература [10,17,18,20]. С позиций, используемых для построениянаучных теорий, модели подразделяются на статистические и полуэмпирические.Статистические основаны на том предположении, что поступающее из источника ЗВпереносится вместе со средним потоком, а его распространение в поперечномпотоку направлении происходит под воздействием вихрей, движение которыхподчиняется определенным статистическим закономерностям. Полуэмпирическиеиспользуют для получения результата те или иные решения уравнения турбулентногопереноса в предположение об аналогии между турбулентной и молекулярнойдиффузией. Слово «полуэмпирические» подчеркивает, что для заданиякоэффициентов турбулентной диффузии необходимы эмпирические предположения, итолько после этого можно начинать поиск точного или численного решенияуравнения переноса.
В зависимости от времениосреднения рассчитываемой концентрации локальные модели можно подразделить накраткосрочные (разовые) и долговременные. Как статистические, так иполуэмпирические краткосрочные модели рассчитывают концентрацию атмосфернойпримеси, осредненную за 20-30 минут. Долгосрочные предназначены для оценкизагрязнения, осредненного за большие промежутки времени (сезон, год) и основанына осреднении разовых расчетов с использованием повторяемости характерных дляданной территории условий распространения ЗВ [17,24,27,31].
С точки зрения простотыиспользования модели также можно разбить на два класса:научно-исследовательские и инженерные. Первые, будучи способными описыватьдостаточно тонкие особенности распространения ЗВ в атмосфере (сложный рельеф,штиль, особенности турбулентного режима, локальные циркуляции и т.д.) [17,18],являются безусловно более сложными, требуют высокой квалификации персонала какдля применения моделей, так и для получения специфических и дорогостоящихисходных данных. Вторые, предназначенные для проектных расчетов, доведены дооднозначно трактуемых числовых зависимостей, табличных и графическихаппроксимаций и обеспечены системой сбора (расчета) исходной информации длявозможности реализации необходимых количественных оценок в процессе выполненияпроектных работ [1,2]. Можно сказать, что именно наличие реальной насегодняшний день системы обеспечения модели исходными данными являетсяпризнаком того, что сама модель представляет практический интерес для целейуправления (нормирования) промышленных выбросов.
Наиболее распространеннойдля инженерных приложений и принятия административных решений за рубежомявляется локальная модель Гауссовского факела [17,20], в основе которой лежитстатистическая теория с рядом упрощающих предположений и большим количествомэмпирических таблиц для задания дисперсионных коэффициентов [20], определяющихпроцесс расширения факела при удалении от источника. Краткосрочная модельпозволяет рассчитать в заданной точке территории разовую (среднюю за 20-30минут) концентрацию в зависимости от трех параметров – скорости ветра,направления ветра и класса устойчивости (температурной стратификации)атмосферы. Гауссовская модель долговременного осреднения позволяет оценитьсреднюю за заданный период концентрацию по совместному распределению (за этотпериод) указанных трех параметров. Для практического использования моделидостаточно иметь данные стандартных метеорологических наблюдений и параметровисточников в объеме, рассмотренном в пункте 2.
Принятая на федеральномуровне Минприродой России [2] для нормативных расчетов модель атмосферногопереноса ЗВ предназначена для расчета максимальных разовых концентраций Сматмосферных примесей, фигурирующих в условии (1.1). Модель была создана в конце60-х годов и в дальнейшем доведена до инженерных формул коллективомразработчиков под руководством проф. М.Е. Берлянда в Главной геофизическойобсерватории им. А.И. Воейкова. В настоящее время она оформлена в видеруководящего документа ОНД-86 [2], вышедшего взамен ранее действующегоСН-369-74 (с рядом уточнений, учетом коэффициента рельефа и застройки). Модельоснована на численном решении стационарного полуэмпирического уравнениятурбулентной диффузии для различных типов источников с последующейаналитической аппроксимацией. Численные расчеты проводились при атмосферныхстратификациях, которым соответствуют наибольшие значения максимума приземнойконцентрации, достигаемые при “опасной” скорости ветра. Отсюда следует, чтомодель [2] изначально нацелена на расчет верхней оценки приземных концентрацийпри нормальных (соответствующих условиям стационарности) метеоусловиях. Поэтомуаналитические аппроксимации, в отличие от Гауссовских моделей, позволяютоценивать концентрации ЗВ только в зависимости от двух параметров – скорости инаправления ветра. А поскольку невозможно получить априорного аналитическогорешения для нахождения максимума (по скорости и направлению) суммарнойконцентрации для произвольного множества произвольно расположенных ИЗА, тоуказанная задача решается численно для каждого конкретного случая либо методомпростого перебора, либо на основе анализа характерных особенностей заданногомножества ИЗА. Для применения модели нужно знать, кроме параметров ИЗА,коэффициент рельефа территории, коэффициент осаждения исследуемой примеси,параметр характерной “опасной” стратификации атмосферы (все три этих параметраспециально ориентированны на модель [2]) и климатические показатели,определяющие для заданной территории режим температуры окружающего воздуха искорости ветра. Соответствующие количественные характеристики, вместе сфоновыми концентрациями, выдаются для проектных расчетов территориальнымиподразделениями Росгидромета.
1.6 Унифицированные программы расчета загрязнения атмосферы
С середины 70-х годовначали разрабатываться программы расчета загрязнения атмосферы (ПРЗА) дляшироко распространенных в то время ЭВМ типа БЭСМ и М-20. Наличие достаточносложной вычислительной основы при расчете поля приземных концентраций имноговариантности методики [2] приводили к естественным ошибкам в алгоритмах ипрограммных реализациях и, как следствие, к несопоставимости результатов,полученных на основе различных программ. Поэтому сложилась практикатестирования разработанных в различных организациях программ расчета экспертамиГГО им. А.И. Воейкова. Такая практика сохранилась и до настоящего времени.Успешно прошедшие тестирование программы получают статус«согласованных» и относятся к классу унифицированных ПРЗА (илиУПРЗА). Список таких программ ежегодно рассылается Минприродой России своимтерриториальным подразделения и всем заинтересованным организациям. В настоящеевремя наибольший интерес представляют УПРЗА для персональных компьютеров,имеющие дружественный интерфейс и широкие графические возможности. Одна изУПРЗА входит в состав программного комплекса ЭРА-ВОЗДУХ (подробнее см. WWW.logos-plus.ru),разработчиком алгоритма и программной реализации которой является А.А. Быков.
Использование УПРЗАзначительно облегчает расчет загрязнения приземного слоя атмосферы отсуществующего или проектируемого промышленного объекта. Для этого достаточнозадать определяющие климатические параметры города или района расположенияобъекта, описать состояние источников загрязнения атмосферы (см. пункт 2.2),выбрать расчетный прямоугольник, задать параметры поиска максимума по скоростии направлению ветра. После этого надо запустить программу на расчет. В итогепользователь получает в заданных расчетных точках таблицу максимальныхконцентраций для всех выбрасываемых объектом ЗВ и построенную на ее основекарту-схему предприятия с уровнями загрязнения атмосферы в виде изолиний. Втаблице обязательно указываются опасные скорости и направления ветра, а такженесколько, так называемых, «основных вкладчиков», на которые (с точкизрения модели) следует в первую очередь нацелить атмосфероохранные мероприятия.Кроме того, прилагаемые к УПРЗА сервисные блоки формируют всю необходимуюпроектную документацию, соответствующую по форме и содержанию единымтребованиям.
Основным режимом любойУПРЗА, реализующих нормативную методику [2], является поиск в каждой заданнойрасчетной точке максимума приземной концентрации при всевозможных скоростях инаправлениях ветра. Скорость варьируется в интервале от 0.5 до U*, где U* — скорость, вероятность превышения которой не более 5%. Поиск максимизирующего(или “опасного”) направления ветра осуществляется по всему кругу или в заданномпользователем секторе, если направление ветра, при котором предприятие влияетна жилые районы, достаточно очевидно. Естественно, можно рассчитать и полеприземных концентраций при заданных скорости и направлении ветра. Однакоследует подчеркнуть, что использование такого расчета для целей оперативногомониторинга загрязнения не вполне корректно, поскольку стратификация в [2]априорно предполагается неблагоприятной, а не соответствующей данному моментувремени. Эту особенность следует учитывать и при сопоставлении более сложныхисследовательских моделей с нормативной. Например, модели, основанные надостаточно реалистичных приближениях пограничного слоя атмосферы могутучитывать криволинейность воздушного потоков и продемонстрировать, что приветре такого-то направления промышленный факел существенно смещается в сторонупо сравнению с прямолинейным, полученным по расчету на УПРЗА при том женаправлении. Безусловно, данный факт является основанием для серьезной критикимодели, если ее целью является расчет “актуальных” концентраций для заданногомомента времени. Но методика [2] и реализующие ее УПРЗА на ставят перед собойтакой цели, а предназначены для получения верхней оценки разовой концентрации вкаждой расчетной точке, полученной в процессе перебора возможный скоростей инаправлений ветра. Поэтому основанием для критики [2] (цель не соответствуетрезультату) со стороны разработчиков физически более совершенных моделей можетслужить расчет в той или иной области города более высоких концентраций прикаких-то характерных условиях распространения ЗВ (естественно, при идентичныхпараметрах ИЗА)./> 1.7 МетодЫравного квотирования и МРН-87
В соответствии с [43]определение допустимых выбросов Xj методом равного квотирования выполняются на основе анализа рассчитанныхприземных концентраций Ci в контрольных точках, где расчетная модель ОНД-86 дает превышение ПДК.
Алгоритм нормирования
Рекомендуемое значениег/с выбросов рассчитываются исходя из принципа равного квотирования вкладовИЗА, обеспечивающих концентрацию в точке в пределах ПДК. Квота вклада Cнj каждого j-го источника определяется для каждой точки с учетом числа ИЗА, дающихвклады в общую концентрацию в этой точке.
Перед расчетом изпроцесса нормирования исключаются ИЗА, дающие незначительный вклад в общуюконцентрацию в точке (меньше Сзн.)
Квота вклада источникаопределяется поэтапно и рассчитывается по следующему алгоритму:
Этап 1 – начальноезначение квоты принимается равным Cзн
Cp=Pзн,
где Сзн=N\Kобщ;
Kобщ – число вкладов в точке;
N – целевая концентрация в точкеравная 1 ПДК; для зон санитарной охраны курортов, домов отдыха, зон городов идругих территорий с повышенными требованиями к охране атмосферного воздуха N= 0.8 ПДК.
Этап 2 – определяетсячисло нормируемых вкладов при квоте Cp, т.е. число вкладов больше расчетной квоты:
Kнорм.=Kобщ.-Kненорм.,
где:   Kнорм. – число нормируемых вкладов (Сj > Cp);
Kненорм. – число ненормируемых вкладов (Сj
Cj– вклад j–го источника в суммарную концентрацию.
Этап 3 – определяетсяновое значение расчетной квоты (C’p):
C’p=(N-Cненорм.)/Kнорм.
Где    Cненорм – сумма вкладов в долях ПДК, непревышающих текущего значения Cp.
Если число нормируемыхисточников K’норм. по квоте C’p меньше числа нормируемых вкладов K’норм. по квоте Cp, то повторяем этапы 2 и 3, приняв C’p=Cp.
В противном случаепринимаем нормативную квоту Cн= C’p.
Нормативное значениевклада ИЗА Сiнорм в долях ПДК принимается равнымнормативной квоте Cн:
Cнормj.=Cн

Мощность выброса ЗВкаждого существенного источника снижается пропорционально требуемому снижениювклада в точке:
Qнормj =Qj*(Снормj|/Сj)
В качестве нормативамощности выброса Xjпринимается наименьшее значение Qнормj из рассчитанных во всех точках, гдеданный источник дает вклад в общую концентрацию.
Другой встречающийся вметодической литературе метод расчетного определения ПДВ для группы источниковносит название МРН-87 [42]. Суть его заключается в том, что все контрольныеточки (где С>N) ранжируются впорядке убывания, после чего расчет начинается с точки 1. Всем источникам,определяющим заданный процент (95%-100%) загрязнения в этой точкеустанавливается кратность снижения, равная С/N. На основе свойства линейности загрязнение в остальных точкахпересчитывается. Если существуют точки, где превышение С>N сохранятся (там подключаются другиеисточники), то процедура повторяется. И так до тех пор, пока во всех точках небудет обеспечено соблюдение норматива N (ПДК).
Оба рассмотренных методадают частное решение ранее рассмотренной системы линейных неравенств />(С-существующая концентрация, N- еенормативное значение, Х — ПДВ) для I контрольных точек (i=1,..,I). Отсутствие целевой функции непозволяет интерпретировать смысл рассчитанных таким образом ПДВ. Опыт работы сэтими методами, реализованными в составе ПК ЭРА-ВОЗДУХ, показывает, что вразличных случаях то один, то другой дает более выгодные для предприятиярезультаты в смысле максимального оставшегося после снижения суммарноговыброса.
2. Симплекс-метод
Симлекс-метод — этохарактерный пример итерационных вычислений. используемых при решениибольшинства оптимизационных задач.
В вычислительной схемесимплекс-метода реализуется упорядоченный процесс, при котором, начиная снекоторой исходной допустимой угловой точки (обычно начало координат),осуществляются последовательные переходы от одной допустимой экстремальнойточки к другой до тех пор, пока не будет найдена точка, соответствующаяоптимальному решению. /> 2.1 Общаяхарактеристика симплекс метода
Симплекс метод — этоуниверсальный метод для решения линейных систем уравнений или неравенств илинейного функционала [25].
Общая идея симплексметода для решения ЗЛП (задачи линейного программирования) состоит в:
-    умении находитьначальный опорный план;
-    наличии признакаоптимальности опорного плана;
-    умении переходитьк нехудшему опорному плану.
Пусть ЗЛП представленасистемой ограничений в каноническом виде:
/>.
Говорят, что ограничениеЗЛП имеет предпочтительный вид, если при неотрицательной правой части />левая частьограничений содержит переменную, входящую с коэффициентом, равным единице, а востальные ограничения равенства — с коэффициентом, равным нулю.
Пусть система ограниченийимеет вид
/>
Сведем задачу кканоническому виду. Для этого прибавим к левым частям неравенств дополнительныепеременные /> />. Получимсистему, эквивалентную исходной:
/>,
которая имеетпредпочтительный вид
/>.
В целевую функциюдополнительные переменные вводятся с коэффициентами, равными нулю /> />.
Пусть далее системаограничений имеет вид
/>
Сведём её к эквивалентнойвычитанием дополнительных переменных /> />из левых частей неравенствсистемы. Получим систему
/>
Однако теперь системаограничений не имеет предпочтительного вида, так как дополнительные переменные
/> входят в левую часть (при />) скоэффициентами, равными –1. Поэтому, вообще говоря, базисный план
/> 
не является допустимым. Вэтом случае вводится так называемый искусственный базис. К левым частямограничений-равенств, не имеющих предпочтительного вида, добавляютискусственные переменные />. В целевую функцию переменные />, вводят скоэффициентом М в случае решения задачи на минимум и с коэффициентом -М длязадачи на максимум, где М — большое положительное число. Полученная задачаназывается М-задачей, соответствующей исходной. Она всегда имеет предпочтительныйвид.
Пусть исходная ЗЛП имеетвид
/>                             (2.1)
/>                   (2.2)
/> />                                 (2.3)
причём ни одно изограничений не имеет предпочтительной переменной. М-задача запишется так:
/>               (2.4)
/>           (2.5)
/> />, /> , />      (2.6)
Задача (2.4)-(2.6) имеетпредпочтительный план. Её начальный опорный план имеет вид
/>
Если некоторые изуравнений (2.2) имеют предпочтительный вид, то в них не следует вводитьискусственные переменные.
Теорема. Если в оптимальном плане
/>               (2.7)
М-задачи (2.4)-(2.6) всеискусственные переменные /> />, то план /> является оптимальнымпланом исходной задачи (2.1)-(2.3).
Для того чтобы решитьзадачу с ограничениями, не имеющими предпочтительного вида, вводятискусственный базис и решают расширенную М-задачу, которая имеет начальныйопорный план />
Решение исходной задачисимплексным методом путем введения искусственных переменных /> называется симплекснымметодом с искусственным базисом.
Если в результатеприменения симплексного метода к расширенной задаче получен оптимальный план, вкотором все искусственные переменные />, то его первые n компоненты даютоптимальный план исходной задачи.
 
Теорема. Если в оптимальном плане М-задачихотя бы одна из искусственных переменных отлична от нуля, то исходная задача неимеет допустимых планов, т. е. ее условия несовместны.
Признаки оптимальности.
 
Теорема. Пусть исходная задача решается намаксимум. Если для некоторого опорного плана все оценки /> />неотрицательны, то такойплан оптимален.
Теорема. Если исходнаязадача решается на минимум и для некоторого опорного плана все оценки /> /> являются неположительными,то такой план оптимален.
Для привидения системыограничений неравенств к каноническому виду, необходимо в системе ограниченийвыделить единичный базис.
I.  Ограничения вида «0»- ресурсные ограничения.Справа находится то что мы используем на производстве, слева — то что получаем.При таких ограничения вводят дополнительные переменные с коэффициентом «+1»,образующие единичный базис. В целевую функцию эти переменные войдут с коэффициентом«0».
II. Ограничения вида «=». Часто бывает,что несмотря на то что ограничения имеют вид равенства, единичный базис невыделяется или трудно выделяется. В этом случае вводятся искусственныепеременные для создания единичного базиса — Yi. В систему ограничений они входят с коэффициентом «1». а вцелевую функцию с коэффициентом «M»,стремящимся к бесконечности (при Fmin — «+M», при Fmax — «-M»).
III.Ограничения вида «0» — Плановые ограничения. Дополнительные переменные (X), несущие определенный экономический смысл — перерасходресурсов или перевыполнение плана, перепроизводство, добавляются с коэффициентом«-1», в целевую функцию — с коэффициентом «0». А искусственные переменные (Y) как в предыдущем случае.
2.2 Алгоритм симплекс метода (первая симплекс таблица)
/>Пусть система приведена к каноническому виду.
X1+                               q1,m+1 Xm+1 +…. + q1,m+n Xm+n = h1
X2+                     q1,m+1 Xm+1 +…. + q1,m+n Xm+n = h1
X3+            q1,m+1 Xm+1 +…. + q1,m+n Xm+n = h1
……………………………………………………………….
Xm+ qm,m+1 Xm+1 + …. + qm,m+n Xm+n =hm
В ней m базисных переменных, k свободных переменных. m+k=n — всегопеременных.
Fmin= C1X1+ C2X2+ C3X3+....+ CnXn
Все hi должны быть больше либо равны нулю,где i=1,2...m. На первом шаге в качестве допустимого решения принимаем всеXj=0 (j=m+1,m+2,...,m+k). При этом всебазисные переменные Xi=Hi.
Для дальнейшихрассуждений вычислений будем пользоваться первой симплекс таблицей (таблица1).
Таблица 1.C Б H C1 C2 … Cm Cm+1 … Cm+k X1 X2 … Xm Xm+1 … Xm+k
C1
C2
C3
:
:
Cm
X1
X2
X3
:
:
Xm
h1
h2
h3
:
:
hm
1
:
:
1
:
:
:
:
:
:
:
:
:
:
q1,m+1
q2,m+1
q3,m+1
:
:
qm,m+1
:
:
:
:
:
:
q1,m+k
q2,m+k
q3,m+k
:
:
qm,m+k F= F0  … m m+1 … m+k

Первый столбец-коэффициенты в целевой функции при базисных переменных.
Второй столбец — базисныепеременные.
Третий столбец — свободные члены (hi00).
Самая верхняя строка — коэффициенты при целевой функции.
Вторая верхняя строка — сами переменные, входящие в целевую функцию и в систему ограничений.
Основное поле симплексметода — система коэффициентов из уравнения.
Последняя строка — служитдля того, чтобы ответить на вопрос: «оптимален план или нет».
Индексная строкапозволяет нам судить об оптимальности плана:
1. При отыскании Fmin в индексной строке должны бытьотрицательные и нулевые оценки.
2. При отыскании Fmax в индексной строке должны бытьнулевые и положительные оценки.
Переход ко второйитерации:
Для этого отыскиваем ключевой (главный) столбец и ключевую(главную) строку.
Ключевым столбцомявляется тот в котором находится наибольший положительный элемент индекснойстроки при отыскании Fminили наименьший отрицательный элемент при отыскании Fmax.
Ключевой строкойназывается та, в которой содержится наименьшее положительное частное от деленияэлементов столбца H на соответствующиеэлементы ключевого столбца.
На пересечении строки истолбца находится разрешающий элемент.
На этом этапеосуществляется к переходу к последующим итерациям.
Переход к итерациям:
1. Выводится базис ключевой строки,уступая место переменной из ключевого столбца со своим коэффициентом.
2. Заполняется строка вновь введенногобазиса путем деления соответствующих элементов выделенной строки предыдущейитерации на разрешающий элемент.
3. Если в главной строке содержитсянулевой элемент, то столбец, в котором находиться этот элемент переноситься впоследующую итерацию без изменения.
4. Если в главном столбце имеетсянулевой элемент, то строка, в которой он находиться переноситься без измененияв последующую итерацию.
5. Остальные элементы переносятся поформуле:
/>
3. Формализация поставленной задачи
Прежде всего,покажем, что характерные свойства МАД и известные сведения из теории линейныхоператоров позволяют экспертизу АОМ и установление ПДВ формализовать в видедвух зависимых математических задач.
Пустьсуммарное загрязнение ВБ города отдельной примесью характеризуется функцией C(X,t) пространственных координат ивремени. Загрязнение считается допустимым при C(X,t) – норматив. Если C(X,t) > N(X), то необходимы АО мероприятия подостижению норматива. При их планировании из суммарного загрязнения атмосферытребуется выделить вклады Cj(X,t), j=1,…,J от J заданных источников, подкоторыми могут подразумеваться как отдельные трубы, аэрационные фонари и т.д.,так и их совокупности, объединенные по различным признакам (по принадлежности кодному цеху, предприятию, ведомству по высоте выброса и т.д.). Пусть выбросы источниковесть Q = (Q 1,Q 2,…,QJ). Предположим, чтоостальные параметры (высота, координаты и т.д.) в результате АОМ не изменяются.Тогда возникающую при экспертизе планов АОМ города задачу — определитьизменение dC характеристик загрязнения ВБ по сравнению с базовым (предплановым)периодом – можно записать в виде:
dC = C0– CP = A(Q) – A(X) (3.21)
где А-оператор модельной зависимости C от Q; величины C с индексом '0'относятся к базовому периоду, а с индексом 'P' — к ожидаемому послереализации запланированных АОМ. Заметим, что не только ожидаемый CP,но и существующий уровень загрязнения C0, суммарное значениекоторого в некоторых точках промышленного города регулярно измеряется [78],требует в (1.21) модельного представления C0 = A(Q0),поскольку в общем случае методы контроля загрязнения не могут указать вкладконкретного источника в измеряемую величину. Соотношение (3.21) показывает, чтоформализация выделенной задачи сводится к построению и надлежащему применениюоператора А, позволяющего переходить от выбросов к характеристикам загрязненияВБ и различать заданный источник на фоне всех остальных.
Пользуясь линейностьюмодели ОНД-86 по выбросам источников можно представить загрязнение атмосферы вконтрольных точках жилой зоны в виде линейной формы:
/>,
где /> — концентрацияв i-ой точке, /> — выброс j-го источника, /> — вклад j-го источника в i-йточке, который в дальнейшем будем называть коэффициентом влияния. Отметим, чтона практике (поскольку число источников и контрольных точек конечно) оператор Апредставляет собой матрицу, состоящую из коэффициентов влияния aij.
Санитарные требованияприводят к системе линейных неравенств:
/>,
решение которой ищется наинтервале
/>,
где /> — технологическиобоснованный минимум выброса j-го источника.
На сегодняшний день вметодической литературе описаны два метода нахождения решения поставленнойзадачи: МРН-87 [24] и метод равного квотирования [26]. Оба метода краткорассмотрены в параграфе. Они дают частное решение поставленной системынеравенств из соображений удобства нахождения единственного решения. Однаколюбое предприятие заинтересовано в минимальных затратах, необходимых для установлениянормативных выбросов />. Для этой цели, к поставленнойсистеме неравенств добавляем целевую функцию:
/>
Где в общем случае /> — стоимостьснижения на единицу выброса для j-го источника. В данном виде решение Xj дает минимум затрат на достижениенормативного загрязнения атмосферы.
В предположении />
/>,
что эквивалентно />.
Следовательно, задачасводится к поиску максимально допустимого по сумме сочетания выбросов Xj данного предприятия, позволяющегодостичь нормативного загрязнения атмосферы. В связи с линейностью модели ОНД-86по отношению к выбросам для поиска решения поставленной задачи может бытьприменён Симплекс-метод.

/>
/>

4. Программная реализация и пример практическогоприменения
Для достижения поставленной задачи по разработкеинтегрированного в ПК ЭРА-ВОЗДУХ программного модуля расчета оптимальных ПДВпроведено изучение структуры файлов, в которых головной модуль передают данныерасчетного блоку УПРЗА ЭРА. Разработаны соответствующие процедуры для автоматизированногочтения всех необходимых файлов.
 
4.1Выбор загрязняющих веществ
После указания директории с данными для расчета, программасканирует файлы в папке WORK по маске «htop*.ppp», таким образом выбирая загрязняющиевещества, для которых имеются начальные данные и возможно провести расчет.
Далее для каждого отмеченного вещества независимо от другихбудет производиться считывание значений и расчет ПДВ (Xj).
4.2Обработка точек с повышенным загрязнением
procedure get_point(s:string;var countPoint:integer;var point_pdk:tExtArray);
Процедура извлекает значения Ni (ПДК), а так же количество точек I (i=1,..,I), вкоторых выбросы превышают Ni, из файла вида «htop*.ppp» в директории /WORK/.
Внутренняя структура htop*.ppp представляет собой текстовыйфайл, содержащий таблицу с данными о контрольных точках. Значение Ni содержатся в 8-ом столбце. Чащевсего Ni в точках равно 1 или 0.8 для особоохраняемых территорий (санатории, зоны отдыха).
/>

4.3 Обработка источников
procedureget_funnel(s:string; var countFunnel: integer; var funnel_name: tsArray; var funnel_m:tExtArray;varfunnel_min:tExtArray);
Процедура извлекает данные из файла вида «ist_*.txt», которыенаходятся в директории /DAT/. «ist_*.txt» — это текстовый файл, в котором втабличном виде представлена информация об источниках выбросов, в том числе:
·         количествоисточников J;
·         уникальный кодисточника;
·         существующийвыброс источника Qj;
·         минимальновозможный выброс Qjmin (не всегда указывается).
/>

4.4Обработка таблиц влияния источников на точки
procedure get_pointfunnel ( s:string; countPoint: integer; countfunnel: integer; funnel_name: tsArray;funnel_m: tExtArray; var pointfunnelx2: tExtArrayx2; var point_cf:tExtArray);
Процедура извлекает коэффициенты влияния aij из файлов вида «10pd*.ppp», где«10pd*.ppp» — текстовый файл, содержащий отчет о результатах работы программы.
/>

4.5 Применении симплекс-метода
procedure get_simplexsolve (countPoint: integer; countFunnel: integer; point_pdk: tExtArray; point_cf:tExtArray; funnel_m: tExtArray; funnel_min: tExtArray; pointfunnelx2:tExtArrayx2; var x: tExtArray; var s_temp: string);
Процедура, используя данные расчетов программы «ЭРА-воздух»,при помощи симплекс-метода рассчитывает оптимальные выбросы Xj для источников при заданных условиях.
 
4.6Вывод полученных результатов
Результаты полученных вычислений выводятся на формупрограммы, а так же в файлы вида: «h_pd*.gpv», где * — это код вещества, длякоторого производился расчет.
4.7Сравнение различных методов расчета ПДВ для реального предприятия
В расчете загрязненияатмосферы диоксидом азота на расчетном прямоугольнике 9 на 9 км с шагом 500 метров проведен расчет максимальных разовых концентраций, создаваемых 70-юисточниками выброса различного типа и высоты. В итоге получено полемаксимальных концентраций, в которых есть области превышения норматива N, который в данном случае равен ПДК.
Картина загрязненияпредставлена на рисунке 1:
/>
Рис 1. Загрязнениеатмосферы в окрестности исследуемого предприятия.
Программный комплексЭра-Воздух производит автоматический выбор точек превышения норматива N и позволяет найти расчетные значенияПДВ на основе методов МРН-87 и Метода равного квотирования.
При выполнении работы впрограммный комплекс добавлен новый модуль, в соответствии с алгоритмомописанным в пункте 5. Этот модуль позволяет рассчитать оптимальное значение ПДВс использованием симплексного метода. Результаты расчетов ПДВ различнымиметодами представлено ниже в таблицах 4.1, 4.2 и 4.3.
Таблица4.1. Результаты расчетаПДВ (методом равного квотирования)
ПРИМЕСЬ=0301 Азот(IV)оксид (Азота диоксид)
Город :001 Кемерово, Объект: 0025
-----------------------------------------------------------------------------
 | Код |Высота|Существую-|Минимально| Коэфф. | Расчетное |Кратность|
 N | источника |источн.|щийвыброс|возможный | норми- | значение |снижения |
п/п| выброса | м | г/с | выброс|рования | П Д В |выброса |
---|-----------|-------|----------|---г/с----|--------|----г/с----|---------|
 15 00250010354 40.0 8.23900.0 0.485 3.9961 2.062
 53 00250010944 40.0 8.23700.0 0.461 3.7941 2.171
Остальные источники неподлежат нормированию.
-----------------------------------------------------------------------------
В сумме по 0301 51.8545 0.0 0.832 43.1687 1.201
-----------------------------------------------------------------------------
Таблица4.2. Результаты расчетаПДВ (метод МРН-87)
ПРИМЕСЬ=0301 Азот(IV)оксид (Азота диоксид)
Город :001 Кемерово, Объект:0025
-----------------------------------------------------------------------------
 | Код |Высота|Существую-|Минимально| Коэфф. | Расчетное |Кратность|
 N | источника|источн.|щий выброс|возможный | норми- | значение |снижения |
п/п| выброса | м | г/с | выброс|рования | П Д В |выброса |
---|-----------|-------|----------|---г/с----|--------|----г/с----|---------|
 14 00250010353 33.4 1.07500.0 0.739 0.7942 1.354
 15 00250010354 40.0 8.23900.0 0.739 6.0867 1.354
 16 00250010356 60.0 2.15000.0 0.739 1.5884 1.354
 24 00250010656 45.0 1.50000.0 0.739 1.1082 1.354
 41 00250010892 60.0 9.04300.0 0.739 6.6807 1.354
 52 00250010943 33.4 0.52800.0 0.739 0.3901 1.354
 53 00250010944 40.0 8.23700.0 0.739 6.0852 1.354
 54 00250010946 45.0 2.14700.0 0.739 1.5861 1.354
 63 00250011198 24.4 0.51100.0 0.739 0.3775 1.354
 66 00250011225 24.4 0.58900.0 0.739 0.4351 1.354
Остальные источники неподлежат нормированию.
----------------------------------------------------------------------------
В сумме по 0301 51.8545 0.0 0.829 42.9676 1.207
----------------------------------------------------------------------------
Таблица 4.3. Результатырасчета ПДВ (симплексметод)
 ПРИМЕСЬ=0301 Азот(IV) оксид (Азотадиоксид)
 Город :001 Кемерово,Объект :0025
---------------------------------------------------------
| Код |Существую-|Минимально|Расчетное | коэфф. |
| источника |щийвыброс|возможный | значение | норми- |
| выброса | г/с | выброс |П Д В | рования |
|-----------|----------|---г/с----|----г/с----|---------|
|00250010353| 1.075000 |0.000000 | 0.0196222 | 0.01825 |
|00250010943| 0.528000 |0.000000 | 0.0000000 | 0.00000 |
|00250011225| 0.589000 |0.000000 | 0.0000000 | 0.00000 |
— — — — — — — — — — — — — - — — — — — — — — — — — — — — -
| в сумме: 51.854470 49.682092 | 0.95811 |
---------------------------------------------------------
Решениезадачи линейного программирования показывает, что максимально возможный выброспо заводу в целом можно обеспечить при достижении нормы загрязнения, еслизакрыть источники 1225 и 0943, а на источнике 0353 снизить выброс примерно в 50раз. О реальности такого решения могут судить технологические службыпредприятия.
Итоговая таблица сравнениятрех методов:Метод Существующий выброс Расчетное значение Процент снижения Равного квотирования 51.8545 43.1687 16,75 МРН-87 51.8545 42.9676 17,14 Симплексный 51.8545 49.6820 4,19

Заключение
·         Таким образом, впроцессе выполнения дипломной работы проведен обзор существующей системыустановления ПДВ для источников загрязнения атмосферы промышленных предприятий.При этом рассмотрена система обеспечения нормативных задач управления выбросамив атмосферу исходными данными. Исследована структура исходных данных ихкачество. Рассмотрены нормативные требования к загрязнению атмосферы населенныхмест, которые накладывают ограничения на выбросы промышленных предприятий ватмосферу. Показано, что эти требования и свойство линейности нормативной моделирасчета загрязнения атмосферы ОНД-86 по отношению к выбросам ИЗА позволяют представитьпроцедуру нахождения расчетных значений ПДВ в виде задачи линейногопрограммирования.
·         Рассмотренысуществующие в методической литературе способы расчета ПДВ в виде методовравного квотирования и МРН-87. Данные методы не имеют целевой функции и даютнекоторые частные решения поставленной задачи.
·         Изученпрограммный комплекс ЭРА-Воздух и форматы хранения и передачи данных между егомодулями.
·         Разработанапроцедура автоматического считывания исходных данных и результатов из ПКЭРА-Воздух для полного обеспечения задачи линейного программирования исходнымиданными.
·         Разработанапрограмма расчета ПДВ на основе симплекс метода.
·         Решенапрактическая задача по расчету ПДВ для одного из крупных предприятий г. Кемеровокак встроенными в ПК ЭРА-ВОЗДУХ методами (МРН-87, равное квотирование), так и сиспользованием симплекс метода.
·         Показано, чтоиспользование оптимизационного метода расчета ПДВ позволяет обеспечитьнормативное загрязнение атмосферы при больших суммарных выбросах. В случаетехнологической приемлемости такого решения предприятие может существенноснизить платежи за сверхнормативный выброс в атмосферу.

Список литературы
1.        Методическоепособие по расчету, нормированию и контролю выбросов загрязняющих веществ ватмосферный воздух. — СПб.: НИИ Атмосфера МПР РФ, 2002.
2.        ОНД-86. Методикарасчета концентраций в атмосферном воздухе вредных веществ, содержащихся ввыбросах предприятий. Л.: Гидрометеоиздат, 1987.
3.        ПостановлениеПравительства Российской Федерации N182 от 2 марта 2000 г. «О порядкеустановления и пересмотра экологических и гигиенических нормативов качестваатмосферного воздуха, предельно допустимых уровней физических воздействий наатмосферный воздух и государственной регистрации вредных (загрязняющих) веществи потенциально опасных веществ». М., 2000.
4.        ПостановлениеПравительства Российской Федерации от 2 марта 2000 г. N 183 «О нормативахвыбросов вредных (загрязняющих) веществ в атмосферный воздух и вредныхфизических воздействий на него». М., 2000.
5.        Федеральный Закон«Об охране окружающей среды». М., 2002.
6.        Рязанов В.А. Окритериях и методах обоснования максимально допустимых концентраций атмосферныхзагрязнений в СССР.- В кн.: Предельно допустимые концентрации атмосферныхзагрязнений. Вып.8. — М.: Медицина, 1964, с. 5-21.
7.        Перечень и кодывеществ, загрязняющих атмосферный воздух. СПб., 2000.
8.        Беспамятнов Г.П.,Кротов Ю.А. Предельно допустимые концентрации химических веществ в окружающейсреде — Л.: «Химия», 1985.
9.        Пинигин М.А.Значение вероятностного подхода при решении вопросов гигиеническогорегламентирования атмосферных загрязнений. В кн. ”Медицинские проблемы охраны окружающейсреды”. М.: 1981, с.95-102.
10.     Берлянд М.Е.Прогноз и регулирование загрязнения атмосферы. –Л.: Гидрометеоиздат, 1985,272с.
11.     Безуглая Э.Ю.Мониторинг состояния загрязнения атмосферы в городах. Л.: Гидрометеоиздат,1986, 200с.
12.     Безуглая Э.Ю.,Ковалевский А.Г., Расторгуева Г.П. Особенности распределения промышленныхпримесей в атмосфере городов различных типов. Тр. ГГО, вып. 467, 1983, с.81-87.
13.     Перечень методиквыполнения измерений концентраций загрязняющих веществ в выбросах промышленныхпредприятий СПб., 2001.
14.     Переченьдокументов по расчету выделений (выбросов) загрязняющих веществ в атмосферныйвоздух, действующих в 2001-2002 годах. СПб., 2001.
15.     Инструкция поинвентаризации выбросов загрязняющих веществ в атмосферу. Л., 1990.
16.      СанПиН2.1.6.1032-01 «Гигиенические требования к обеспечению качества атмосферноговоздуха населенных мест». М., 2001.
17.     .Атмосфернаятурбулентность и моделирование распространения примесей /под.ред. НьистадтаФ.Т.М., Ван-Допа Х.- Л.: Гидрометеоиздат, 1985,-350 c.
18.     Пененко В.В.,Алоян А.Е. Модели и методы для задач охраны окружающей среды. -Новосибирск.:Наука, 1985.-256с.
19.     ПостановлениеСовета Министров РСФСР. Об утверждении на 1991 год нормативов за выбросызагрязняющих веществ в природную среду и порядка их применения./9 января 1991г.N 13 /. Собрание постановлений правительства РСФСР. -М.: N9, 1991.
20.     HannaS.R. Review of Atmospheric Diffusion Models for Regulatory Application.- WMOTecnical Notes, No.177, 1982-42p.
21.     Методы анализазагрязнений воздуха./Дугов Ю.С., Беликов А.Б., Дьяков Г.А., ТульчинскийВ.М.-М.: Химия, 1984,-384 с.
22.     Вольберг Н.Ш.,Егорова Е.Д., Кузьмина Т.А. Метрологические характеристики фотометрическихметодов анализа загрязнения атмосферы. — Тр. ГГО, 1982, No 450.c.107-111.
23.     Израэль Ю.А,Гасилина Н.К., Ровинский Ф.Я. Система наблюдений и контроля загрязнения природнойсреды в СССР.- Метеорология и гидрология, 1978, No 10, c.5-12.
24.     Методика расчета нормативовдопустимых выбросов загрязняющих веществ в атмосферу для групп источников.МРН-87. — М., Госкомгидромет, Институт прикладной геофизики.1987. -30с.
25.     Рекомендациипо определению допустимых вкладов в загрязнение атмосферы выбросов загрязняющихвеществ предприятиями с использованием сводных расчетов загрязнения воздушногобассейна города (региона) выбросами промышленности и автотранспорта.СПб., 1999.-97с.
26.     Васильев Ф.П. Методы решенияэкстремальных задач. М: Наука, 1980.-518с.

Вспомогательные указатели
/>Перечень сокращений
ЗВ         — загрязняющее (вредное)вещество
ИЗА      — источник загрязненияатмосферы
ПДВ     — предельно допустимый выброс(допустимый выброс)
СЗЗ       — санитарно-защитная зона
ПДКр    — максимальнаяразовая предельно допустимая концентрация загрязняющего вещества в атмосферномвоздухе населенных мест
ПДКс    — среднесуточнаяпредельно допустимая концентрация загрязняющего вещества в атмосферном воздухенаселенных мест
ОБУВ   — ориентировочный безопасныйуровень воздействия загрязняющих веществ в атмосферном воздухе населенных мест
ГВС      — газовоздушная смесь
ГОУ      — газоочистная установка
ОНД     — общесоюзный нормативныйдокумент
НМУ    — неблагоприятныеметеорологические условия
УПРЗА — унифицированная программарасчета загрязнения атмосферы

Приложения
Unit1.pas
unit Unit1;
interface
uses
 Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs,ShellAPI, ShlObj, StdCtrls, Buttons, CheckLst,Masks,inifiles,
 ComCtrls,simplex,Menus;
constMyDecimalSeparator='.';
type
 tsArray =array of string;
 tExtArrayx2 =array of tExtArray;
 TForm1 =class(TForm)
 Edit1: TEdit;
 GroupBox1:TGroupBox;
 CheckListBox1:TCheckListBox;
 Label1:TLabel;
 BitBtn1:TBitBtn;
 Button3:TButton;
 Memo1: TMemo;
 SpeedButton1:TSpeedButton;
 CheckBox1:TCheckBox;
 SpeedButton2:TSpeedButton;
 SpeedButton3:TSpeedButton;
 SpeedButton4:TSpeedButton;
 procedureFormCreate(Sender: TObject);
 procedureFormActivate(Sender: TObject);
 procedureBitBtn1Click(Sender: TObject);
 procedureButton3Click(Sender: TObject);
 procedureN2Click(Sender: TObject);
 procedureSpeedButton1Click(Sender: TObject);
 procedureSpeedButton2Click(Sender: TObject);
 procedureSpeedButton3Click(Sender: TObject);
 procedureSpeedButton4Click(Sender: TObject);
 private
 { Privatedeclarations }
 public
 { Publicdeclarations }
 end;
var
 Form1:TForm1;
 dir_path:string;
 IniFile:TIniFile;
implementation
{$R *.dfm}
//запись в ini файл
procedureSaveIni(s:string);
var
 IniPath:string;
 FileName:string;
begin
 GetDir(0,IniPath);
 FileName:=IniPath+'\sav.ini';
 IniFile:=TIniFile.Create(FileName);
 Inifile.WriteString('patch','dir',s);
 IniFile.Free;
end;
//чтение ini файла
functionReadIni:string;
var
 IniPath:string;
 FileName:string;
 s:string;
begin
 GetDir(0,IniPath);
 FileName:=IniPath+'\sav.ini';
 IniFile:=TIniFile.Create(FileName);
 ReadIni:=Inifile.ReadString('patch','dir',s);
 IniFile.Free;
end;
//--------- Удаляетпробел или запятую с краёв строки --------------------------
FunctionDelSpaceAndCap(s:string):string;
begin
 whilepos(copy(s,1,1),' ')0 do delete(s,1,1);
 whilepos(copy(s,length(s),1),' ')0 do delete(s,length(s),1);
 result:=s;
end;
//--------- вырезает изстроки имя ---------------------------------------------
FunctionReturnSubString(Var s:string):string;
var
 position,i:integer;
begin
 s:=DelSpaceAndCap(s);
 position:=0;
 for i:=1 tolength(s)-1 do
 if(pos(copy(s,i,1),' ')0) and (position=0) then
 position:=i;
 if position=0then begin
 result:=s;
 s:='';
 end elsebegin
 result :=DelSpaceAndCap(copy(s,1,position));
 Delete(s,1,position);
 s:=DelSpaceAndCap(s);
 end;
end;
//вывод ограничений
//==============================================================================
procedurevv(a:real;mas:tExtArray; Sign: TOperation);
var
 i:integer;
 s,s2,s3:string;
begin
 s:=floattostr(mas[0]);
 for i:=1 tolength(mas)-1 do
 s:=s+'+'+floattostr(mas[i]);
 if Sign=lessthen s2:='
 ifSign=Greater then s2:=' > ';
 if Sign=Equalthen s2:=' = ';
 form1.memo1.lines.Add(s+s2+floattostr(a));
end;
//==============================================================================
//==============================================================================
//замена в строке всехвхождений одной подстроки на другую
functionStrReplace(Str, Str1, Str2: string):string;
 var
 p, L:integer;
 s:string;
begin
 s:=str;
 L:=length(str1);
 repeat
 p:=pos(str1,s);
 if p>0then begin
 Delete(s,p,L);
 insert(str2,s, P);
 end;
 until P = 0;
 StrReplace:=s;
end;
//==============================================================================
//==============================================================================
//=========================считывание таблиц влияния таблиц источников на точки
procedureget_pointfunnel(s:string;countPoint:integer;countfunnel:integer;funnel_name:tsArray;funnel_m:tExtArray;
 varpointfunnelx2:tExtArrayx2; var point_cf:tExtArray);
var
 h:textfile;
 k,m:integer;
 s_temp,s_temp2,s_temp3:string;
 flag:boolean;
begin
 SetLength(PointFunnelx2,countPoint,countFunnel);
 SetLength(point_cf,countPoint);
 for k:=0 tocountPoint-1 do begin
 point_cf[k]:=0;
 for m:=0 tocountFunnel-1 do
 PointFunnelx2[k,m]:=0;
 end;
 AssignFile(h,dir_path+'\RESULT\'+'10pd'+s+'.ppp');
 reset(h);
 for k:=1 to22 do readln(h,s_temp);
 s_temp:=StrReplace(s_temp,'|','');
 s_temp2:=s_temp;
 for m:= 0 toCountPoint-1 do begin //общий цикл
 flag:=true;
 while flag dobegin
 if ReturnSubString(s_temp2)='Фоновая' then begin
 point_cf[m]:=strtofloat(copy(s_temp,pos('%',s_temp)-4,4));
 end elsebegin
 s_temp3:=ReturnSubString(s_temp);
 s_temp3:=ReturnSubString(s_temp);
 s_temp3:=ReturnSubString(s_temp);
 for k:=1 to 6do s_temp2:=ReturnSubString(s_temp);
 //showmessage(s_temp2);
 for k:=0 tocountFunnel-1 do
 ifs_temp3=copy(funnel_name[k],8,4) then
 PointFunnelx2[m,k]:=strtofloat(s_temp2);//*funnel_m[k];
 end;
 readln(h,s_temp);
 s_temp:=StrReplace(s_temp,'|','');
 s_temp2:=s_temp;
 ifReturnSubString(s_temp2)='В' thenflag:=false;
 end;
 for k:=1 to16 do readln(h,s_temp);
 s_temp:=StrReplace(s_temp,'|','');
 s_temp2:=s_temp;
 end;
 closefile(h);
end;
//==============================================================================
//==============================================================================
//=========================================================получение источников
procedureget_funnel(s:string; var countFunnel:integer;var funnel_name:tsArray;
 varfunnel_m:tExtArray;var funnel_min:tExtArray);
var
 h,h2:textfile;
 index_funnel: integer;
 i,j:integer;
 s_temp,s_temp2:string;
begin
 AssignFile(h,dir_path+'\DAT\'+'ist_'+s+'.txt');
 reset(h);
 index_funnel:=-11;
 whiles_temp'endI' do begin //чтениефайла (установка размерамассива)
 readln(h,s_temp);
 inc(index_funnel);
 end;
 closefile(h);
 CountFunnel:=index_funnel;
 setLength(funnel_m,CountFunnel);
 setLength(funnel_min,CountFunnel);
 setLength(funnel_name,CountFunnel);
 for i:=0 tocountFunnel-1 do begin
 funnel_m[i]:=0;
 funnel_min[i]:=0;
 funnel_name[i]:='';
 end;
 AssignFile(h2,dir_path+'\DAT\'+'ist_'+s+'.txt');
 reset(h2);
 for j:=1 to 9do
 readln(h2,s_temp);
 for i:= 0 toCountFunnel-1 do begin
 readln(h2,s_temp);
 funnel_name[i]:=ReturnSubString(s_temp);
 for j:=1 to14 do
 s_temp2:=ReturnSubString(s_temp);
 funnel_m[i]:=strtofloat(ReturnSubString(s_temp));
 ifDelSpaceAndCap(s_temp)'' then
 funnel_min[i]:=strtofloat(DelSpaceAndCap(s_temp))
 elsefunnel_min[i]:=0;
 end;
closefile(h2);
end;
//==============================================================================
//==============================================================================
//=============================================================получение точек
procedure get_point(s:string;var countPoint:integer;var point_pdk:tExtArray);
var
 index_point:integer;
 i,j:integer;
 h,h2:textfile;
 s_temp:string;
begin
 index_point:=-2; //переменная для подсчета кол-ва точек
 AssignFile(h,dir_path+'\WORK\'+'htop'+s+'.ppp');
 reset(h);
 whiles_temp'000' do begin//чтение файла (установка размера массива)
 readln(h,s_temp);
 inc(index_point);
 end;
 closefile(h);
 CountPoint:=index_point;
 setLength(point_pdk,countPoint);
 for i:=0 tocountPoint-1 do
 point_pdk[i]:=0;//зануление
 AssignFile(h2,dir_path+'\WORK\'+'htop'+s+'.ppp');
 reset(h2);
 readln(h2,s_temp);
 for i:= 0 tocountPoint-1 do begin
 readln(h2,s_temp);
 for j:=1 to 8do
 point_pdk[i]:=strtofloat(ReturnSubString(s_temp));
 end;
closefile(h2);
end;
//==============================================================================
//==============================================================================
//===========================================решение при помощи симплекс метода
procedureget_simplexsolve(countPoint:integer;countFunnel:integer;point_pdk:tExtArray;
 point_cf:tExtArray;funnel_m:tExtArray;funnel_min:tExtArray;
 pointfunnelx2:tExtArrayx2;varx:tExtArray;var s_temp:string);
var
 mas_temp:tExtArrayx2;
 i,j:integer;
 sim:TSimplex;
 L:tExtArray;
begin
setLength(mas_temp,countFunnel,countFunnel);
setLength(L,countFunnel);
setLength(x,countFunnel);
for i:=0 tocountFunnel-1 do
 for j:=0 tocountFunnel-1 do begin
 if i=j thenmas_temp[i,j]:=1 else mas_temp[i,j]:=0;
 L[j]:=1;
 end;
Sim:=TSimplex.Create(L,true);
for i:=0 tocountPoint-1 do begin
 //showmessage(vv(point_pdk[i],pointfunnelx2[i]));
 Sim.AddCons(point_pdk[i],pointfunnelx2[i],less);
 ifform1.CheckBox1.Checked then vv(point_pdk[i],pointfunnelx2[i],less);
end;
for i:=0 to countFunnel-1do begin
 Sim.AddCons(funnel_m[i],mas_temp[i],less);
 iffunnel_min[i]>0 then begin
 Sim.AddCons(funnel_min[i],mas_temp[i],Greater);
 ifform1.CheckBox1.Checked then vv(funnel_min[i],mas_temp[i],Greater);
 end;
end;
 if(Sim.Solve=SIMPLEX_DONE) then begin
 s_temp:='решение найдено';
 x:=Sim.GetSolution;
 end
 else s_temp:='Решения несуществует';
end;
//==============================================================================
//==============================================================================
//====================================================общий модульдля подсчета
procedureTForm1.Button3Click(Sender: TObject);
var
 s,s_temp,ss:string;
 countPoint:integer;
 countfunnel:integer;
 point_pdk:tExtArray;
 point_cf:tExtArray;
 funnel_m:tExtArray;
 funnel_min:tExtArray;
 funnel_name:tsArray;
 pointfunnelx2: tExtArrayx2;
 i,j:integer;
 x:tExtArray;
 empty:boolean;
 h: textfile;
 funnelSumM,sumX:real;
begin
 funnelSumM:=0;
 sumX:=0;
 memo1.Clear;
 for i:=0 tocheckListBox1.Items.Count-1 do begin
 ifCheckListBox1.Checked[i] then begin
 application.ProcessMessages;
 s:=checklistbox1.Items.Strings[i];
 s:=returnSubString(s);
 application.ProcessMessages;
 get_point(s,countPoint,point_pdk);
 get_funnel(s,countFunnel,funnel_name,funnel_m,funnel_min);
 get_pointfunnel(s,countPoint,countfunnel,funnel_name,funnel_m,pointfunnelx2,point_cf);
 get_simplexsolve(countPoint,CountFunnel,point_pdk,point_cf,funnel_m,funnel_min,pointfunnelx2,x,s_temp);
 AssignFile(h,dir_path+'\RESULT\'+'h_pd'+s+'.gpv');
 rewrite(h);
 if s_temp='решение найдено'then begin
 memo1.lines.Add('');
 memo1.lines.Add('Результаты расчетаПДВ (симплекс метод):');
 memo1.lines.Add('ПРИМЕСЬ='+s);
 memo1.lines.Add('');
 memo1.lines.Add('---------------------------------------------------------');
 memo1.lines.Add('|Код |Существую-|Минимально| Расчетное | коэфф. |');
 memo1.lines.Add('|источника |щий выброс|возможный | значение | норми- |');
 memo1.lines.Add('| выброса | г/с | выброс| П Д В | рования |');
 memo1.lines.Add('|-----------|----------|---г/с----|----г/с----|---------|');
 writeln(h,'');
 writeln(h,' Результатырасчета ПДВ (симплекс метод):');
 writeln(h,' ПРИМЕСЬ='+s);
 writeln(h,'');
 writeln(h,'---------------------------------------------------------');
 writeln(h,'| Код |Существую-|Минимально|Расчетное | коэфф. |');
 writeln(h,'| источника|щий выброс|возможный | значение | норми- |');
 writeln(h,'| выброса | г/с| выброс | П Д В | рования |');
 writeln(h,'|-----------|----------|---г/с----|----г/с----|---------|');
 empty:=true;
 for j:=0 tocountFunnel-1 do begin
 funnelSumM:=FunnelSumM+funnel_m[j];
 sumX:=SumX+x[j];
 ifabs(x[j]-funnel_m[j])>0.0000001 then
 begin
 ss:='|'+funnel_name[j]+'|'+FloatToStrF(funnel_m[j],ffFixed,1000,6)+' |'+FloatToStrF(funnel_min[j],ffFixed,1000,6);
 ss:=ss+' |'+FloatToStrF(x[j],ffFixed,1000,7)+' |'+FloatToStrF(x[j]/funnel_m[j],ffFixed,1000,5)+' |';
 memo1.lines.Add(ss);
 writeln(h,ss);
 empty:=false;
 end;
 end;
 ss:='| в сумме: '+FloatToStrF(funnelSumM,ffFixed,1000,6)+'';
 ss:=ss+FloatToStrF(sumX,ffFixed,1000,6)+'| '+ FloatToStrF(sumX/funnelSumM,ffFixed,1000,5)+' |';
 if empty thenbegin
 memo1.lines.Add('|Нет выбросов для снижения |');
 writeln(h,'| Нет выбросов дляснижения |');
 end;
 if not emptythen begin
 memo1.lines.Add('-- — — — — — — — — — — — — — — — — — — — — — — — — — — -');
 memo1.lines.Add(ss);
 writeln(h,'-- — — — — — — — — — — — — — — — — — — — — — — — — — — -');
 writeln(h,ss);
 end;
 memo1.lines.Add('---------------------------------------------------------');
 memo1.lines.Add('');
 memo1.lines.Add('');
 writeln(h,'---------------------------------------------------------');
 writeln(h,'');
 writeln(h,'');
 end elsebegin
 memo1.lines.Add('');
 memo1.lines.Add('Результаты расчетаПДВ (симплекс метод):');
 memo1.lines.Add('ПРИМЕСЬ='+s);
 memo1.lines.Add('');
 memo1.lines.Add('---------------------------------------------------------');
 memo1.lines.Add('| Решение не найдено|');
 memo1.lines.Add('---------------------------------------------------------');
 writeln(h,'');
 writeln(h,' Результатырасчета ПДВ (симплекс метод):');
 writeln(h,' ПРИМЕСЬ='+s);
 writeln(h,'');
 writeln(h,'---------------------------------------------------------');
 writeln(h,'| Решение не найдено |');
 writeln(h,'---------------------------------------------------------');
 end;
 closefile(h);
 end;
 //closefile(h);
 end;
end;
//==============================================================================
//поиск файла по маске
procedureFindFiles(StartFolder, Mask: string; List: TStrings;
 ScanSubFolders:Boolean = True);
var
 SearchRec:TSearchRec;
 FindResult:Integer;
begin
 List.BeginUpdate;
 try
 StartFolder:= IncludeTrailingBackslash(StartFolder);
 FindResult :=FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
 try
 while FindResult= 0 do
 withSearchRec do
 begin
 if (Attr andfaDirectory) 0 then
 begin
 ifScanSubFolders and (Name '.') and (Name '..') then
 FindFiles(StartFolder+ Name, Mask, List, ScanSubFolders);
 end
 else
 begin
 ifMatchesMask(Name, Mask) then begin
 List.Add(copy(Name,5,4));
 //showmessage(StartFolder+ Name);
 end;
 end;
 FindResult :=FindNext(SearchRec);
 end;
 finally
 FindClose(SearchRec);
 end;
 finally
 List.EndUpdate;
 end;
end;
procedureTForm1.FormCreate(Sender: TObject);
begin
DecimalSeparator:=MyDecimalSeparator;
end;
procedureTForm1.FormActivate(Sender: TObject);
begin
dir_path:=ReadIni;
edit1.Text:=dir_path;
{--}
end;
procedureTForm1.BitBtn1Click(Sender: TObject);
var
 h,h2:textfile;
 i,j,k,n:integer;
 s_temp:string;
 s: array ofarray of string;
begin
 dir_path:=edit1.Text;
 checklistbox1.Items.Clear;
 i:=0;
 AssignFile(h,dir_path+'\WORK\activ2.txt');
 reset(h);
 //readln(h,s_temp);
 while not EOF(h) do begin//чтениефайла (установка размера массива)
 readln(h,s_temp);
 inc(i);
 end;
 closefile(h);
 setlength(s,i,2);
 AssignFile(h2,dir_path+'\WORK\activ2.txt');
 reset(h2);
 for j:=0 toi-1 do begin
 readln(h2,s_temp);
 s[j,0]:=copy(s_temp,24,4);
 s[j,1]:=copy(s_temp,30,55);
 end;
 closefile(h2);
 FindFiles(dir_path,'htop*.ppp', checklistbox1.items, true);
 n:=checklistbox1.items.Count-1;
 for j:=0 to ndo begin
 for k:=0 toi-1 do begin
 //showmessage(s[k,0]+'-| ');
 ifchecklistbox1.items[0]=s[k,0] then begin
 //showmessage(s[j,0]+'| '+s[j,1]);
 checklistbox1.items.Delete(0);
 checklistbox1.items.Add(s[k,0]+''+s[k,1]);
 end;
 end;
 end;
end;
procedureTForm1.N2Click(Sender: TObject);
var
 TitleName:string;
 lpItemID:PItemIDList;
 BrowseInfo:TBrowseInfo;
 DisplayName:array[0..MAX_PATH] of char;
 TempPath:array[0..MAX_PATH] of char;
begin
 FillChar(BrowseInfo,siCeof(TBrowseInfo), #0);
 BrowseInfo.hwndOwner:= Form1.Handle;
 BrowseInfo.psCDisplayName:= @DisplayName;
 TitleName :='Please specify a directory';
 BrowseInfo.lpsCTitle:= PChar(TitleName);
 BrowseInfo.ulFlags:= BIF_RETURNONLYFSDIRS;
 lpItemID :=SHBrowseForFolder(BrowseInfo);
 if lpItemId nil then
 begin
 SHGetPathFromIDList(lpItemID,TempPath);
 edit1.Text:=TempPath;
 GlobalFreePtr(lpItemID);
 end;
//showmessage(tempPath);
dir_path:=tempPath;
//FindFiles(tempPath,'htop*.ppp', checkmemo1.lines, true); //стараяверсия
SaveIni(dir_path);
end;
procedureTForm1.SpeedButton1Click(Sender: TObject);
var
 TitleName:string;
 lpItemID:PItemIDList;
 BrowseInfo:TBrowseInfo;
 DisplayName:array[0..MAX_PATH] of char;
 TempPath:array[0..MAX_PATH] of char;
begin
 FillChar(BrowseInfo,siCeof(TBrowseInfo), #0);
 BrowseInfo.hwndOwner:= Form1.Handle;
 BrowseInfo.psCDisplayName:= @DisplayName;
 TitleName :='Please specify a directory';
 BrowseInfo.lpsCTitle:= PChar(TitleName);
 BrowseInfo.ulFlags:= BIF_RETURNONLYFSDIRS;
 lpItemID :=SHBrowseForFolder(BrowseInfo);
 if lpItemId nil then
 begin
 SHGetPathFromIDList(lpItemID,TempPath);
 edit1.Text:=TempPath;
 GlobalFreePtr(lpItemID);
 end;
//showmessage(tempPath);
dir_path:=tempPath;
//FindFiles(tempPath,'htop*.ppp', checkmemo1.lines, true); //стараяверсия
SaveIni(dir_path);
end;
procedureTForm1.SpeedButton2Click(Sender: TObject);
var
 i:integer;
begin
for i:=0 tochecklistbox1.Items.Count-1 do
 checklistbox1.Checked[i]:=true;
end;
procedureTForm1.SpeedButton3Click(Sender: TObject);
var
 i:integer;
begin
for i:=0 tochecklistbox1.Items.Count-1 do
 checklistbox1.Checked[i]:=false;
end;
procedureTForm1.SpeedButton4Click(Sender: TObject);
var
 i:integer;
begin
for i:=0 tochecklistbox1.Items.Count-1 do
 ifchecklistbox1.Checked[i] then checklistbox1.Checked[i]:=false
 elsechecklistbox1.Checked[i]:=true;
end;
end.
Simplex.pas
unit simplex;
interface
const
 SIMPLEX_DONE= 0; // оптимизация успешно завершена
 SIMPLEX_NO_SOLUTION= 1; // задача не имеет решения(не удаетсянайти базис)
 SIMPLEX_NO_BOTTOM = 2; //решения нет, т.к. линейная форма не ограничена снизу
 SIMPLEX_NEXT_STEP = 3; // для получения решения нужносделать еще хотя бы один шаг
 MAX_VAL =0.1e-12; //точность (значение,удовлетворяющее -MAX_VAL
type
 TOperation =(Equal,Less,Greater);
 TExtArray =array of extended;
 TConstrain =record
 A: TExtArray;
 B: extended;
 Sign: TOperation;
 isT: boolean;
 end;
 TSimplex =class
 M,N: integer;{ M — число строк, N — число столбцов}
 RealN: integer; {реальное число переменных, изначально вошедших взадачу}
 Cons: array of TConstrain;
 C: TExtArray;
 L: extended;
 Basis: arrayof integer;
 Max: boolean; { направление оптимизации: минимизация илимаксимизация }
 Constructor Create(_C:TExtArray;MaximiCe:boolean=false);
 ConstructorCreateBasis(const Simplex:TSimplex);
 ConstructorCopy(const Simplex:TSimplex);
 ProcedureAddCons(_B:extended; _A:TExtArray; Sign:TOperation);
 ProcedureSetAllLengths(Len:integer);
 Function SimplexStep:integer;
 Function CheckBasis:boolean;
 Function FoundInBasis(num:integer):integer;
 Function DoPrec(num:extended):extended;
 ProcedureNormaliCe;
 ProcedureMulString(Number:integer; Value:extended);
 ProcedureAddString(Num1,Num2:integer; Value:extended); {суммирование строки 1 со строкой2, домноженной на коэффициент Value }
 FunctionSolve:integer;
 FunctionGetMin:extended;
 FunctionGetSolution:TExtArray;
 DestructorFree;
 end;
 TIntSimplex =class(TSimplex)
 // CurX:TExtArray;
 //CurL:extended;
 // CurFound:boolean;
 ConstructorCreate(_C:TExtArray; MaximiCe:boolean=false);
 // ProcedureDelLastCons;
 Function IntSolve:integer;
 Function GetIntMin:extended;
 Function IsInteger(value:extended):boolean;
 Function GetIntSolution:TExtArray;
 // Function SearchCons(_B:extended;_A:TExtArray):integer;
 end;
implementation
uses Math;
{ TSimplex }
Function TSimplex.DoPrec(num:extended):extended;
begin
 if ((num -MAX_VAL)) then
 num := 0;
 Result :=num;
end;
procedureTSimplex.AddCons(_B: extended; _A: TExtArray; Sign: TOperation);
var
 j: integer;
begin
 if(Length(_A)>N) then SetAllLengths(Length(_A));
 inc(M);
 SetLength(Cons,M);
 //if ((_B=0)and (Sign=Less)) then Sign:=Equal; //???
 Cons[M-1].B:=_B;
 Cons[M-1].Sign:=Sign;
 SetLength(Cons[M-1].A,N);
 for j:=0 toLength(_A)-1 do Cons[M-1].A[j]:=_A[j];
 ifLength(_A)
end;
{суммирование строки 1 сострокой 2, домноженной на коэффициент Value }
procedureTSimplex.AddString(Num1, Num2: integer; Value: extended);
var
 j: integer;
begin
 for j:=0 toN-1 do Cons[Num1].A[j]:=Cons[Num1].A[j]+Cons[Num2].A[j]*Value;
 Cons[Num1].B:=Cons[Num1].B+Cons[Num2].B*Value;
end;
functionTSimplex.CheckBasis: boolean;
var
 i,j,k:integer;
 f: boolean;
begin
 SetLength(Basis,M);
 for i:=0 toM-1 do Basis[i]:=-1;
 for j:=0 toN-1 do begin
 f:=true;
 k:=-1;
 i:=0;
 while (f and(i
 if((Cons[i].A[j]0) and (Cons[i].A[j]1)) then f:=false;
 if (Cons[i].A[j]=1)then begin
 if (k=-1)then k:=i
 elsef:=false;
 end;
 inc(i);
 end;
 if (f and(k-1)) then Basis[k]:=j;
 end;
 f:=true;
 for i:=0 toM-1 do f:=f and (Basis[i]-1);
 Result:=f;
end;
constructorTSimplex.Create(_C: TExtArray; MaximiCe:boolean);
var
 j: integer;
begin
 N:=Length(_C);
 RealN := N;
 M:=0;
 SetLength(C,N);
 Max:=MaximiCe;
 if (notMaximiCe) then for j:=0 to N-1 do C[j]:=-_C[j]
 else for j:=0to N-1 do C[j]:=_C[j];
 Max:=MaximiCe;
 L := 0;
end;
constructorTSimplex.Copy(const Simplex: TSimplex);
var
 i,j: integer;
begin
 M:=Simplex.M;
 N:=Simplex.N;
 RealN :=Simplex.RealN;
 SetLength(Cons,M);
 SetLength(Basis,M);
 SetLength(C,N);
 Max:=Simplex.Max;
 for i:=0 toM-1 do begin
 SetLength(Cons[i].A,N);
 Basis[i]:=-1;
 for j:=0 toN-1 do Cons[i].A[j]:=Simplex.Cons[i].A[j];
 Cons[i].B:=Simplex.Cons[i].B;
 Cons[i].Sign:=Simplex.Cons[i].Sign;
 end;
 for i:=0 toSimplex.N-1 do C[i]:=Simplex.C[i];
 L :=Simplex.L;
end;
constructorTSimplex.CreateBasis(const Simplex: TSimplex);
var
 i,j: integer;
begin
 M:=Simplex.M;
 N:=Simplex.N;
 RealN :=Simplex.RealN;
 L := 0;
 SetLength(Cons,M);
 SetLength(Basis,M);
 SetLength(C,N);
 for i:=0 toN-1 do C[i]:=0;
 for i:=0 toM-1 do begin
 SetLength(Cons[i].A,N);
 for j:=0 toN-1 do Cons[i].A[j]:=Simplex.Cons[i].A[j];
 Cons[i].B:=Simplex.Cons[i].B;
 Cons[i].Sign:=equal;
 Cons[i].isT:= false;
 end;
 for i:=0 toM-1 do begin
 if(Simplex.Basis[i]-1) then Basis[i]:=Simplex.Basis[i]
 else begin
 SetAllLengths(N+1);
 for j:=0 toM-1 do Cons[j].A[N-1]:=0;
 Cons[i].A[N-1]:=1;
 Cons[i].isT:= true;
 C[N-1] := 0;
 for j:=0 toSimplex.N-1 do C[j] := C[j] + Simplex.Cons[i].A[j];
 L := L +Cons[i].B;
 end;
 end;
end;
destructorTSimplex.Free;
begin
 SetLength(C,0);
 SetLength(Basis,0);
 SetLength(Cons,0);
 M:=0;
 N:=0;
 RealN := 0;
end;
functionTSimplex.GetMin: extended;
var
 i: integer;
begin
 if (Max) then
 Result := -L
 else
 Result := L;
end;
functionTSimplex.GetSolution: TExtArray;
var
 Solution:TExtArray;
 i,j:integer;
begin
 SetLength(Solution,RealN);
 for j:=0 toRealN-1 do begin
 Solution[j]:=0;
 i:=0;
 while((ij)) do inc(i);
 if((Basis[i]=j) and (i
 end;
 Result:=Solution;
end;
procedureTSimplex.MulString(Number: integer; Value: extended);
var
 j: integer;
begin
 for j:=0 toN-1 do Cons[Number].A[j]:=Cons[Number].A[j]*Value;
 Cons[Number].B:=Cons[Number].B*Value;
end;
procedureTSimplex.NormaliCe;
var
 i: integer;
begin
 for i:=0 toM-1 do if (Cons[i].SignEqual) then begin
 SetAllLengths(N+1);
 if(Cons[i].Sign=Greater) then Cons[i].A[N-1]:=-1
 elseCons[i].A[N-1]:=1;
 Cons[i].Sign:= Equal;
 end;
end;
procedureTSimplex.SetAllLengths(Len: integer);
var
 i, j: integer;
 OldN: integer;
begin
 OldN:=N;
 N:=Len;
 SetLength(C,N);
 for i:=0 toM-1 do SetLength(Cons[i].A,N);
 if(OldN
 for j:=OldNto N-1 do begin
 C[j]:=0;
 for i:=0 toM-1 do Cons[i].A[j]:=0;
 end;
 end;
end;
functionTSimplex.FoundInBasis(num:integer): integer;
var
 i:integer;
 f:boolean;
begin
 f := false;
 i := 0 ;
 while (not fand (i
 begin
 f :=(Basis[i] = num);
 inc(i);
 end;
 if (f) then
 Result := i-1
 else
 Result := -1;
end;
functionTSimplex.SimplexStep: integer;
var
 i,j: integer;
 f,opt: boolean;
 x,y: integer;//координаты опорного элемента
 CurMax: extended;
 temp: arrayof TConstrain;
 tempC: TExtArray;
begin
 opt := true;
 CurMax := -1;
 for i := 0 toN-1 do
 begin
 //проверка наразрешимость
 if (C[i] > 0) then
 begin
 opt := false;//а это попутная проверка на оптимальность
 if (C[i] > CurMax) then //аэто поиск ведущего столбца (максимальный элемент в C[i])
 begin
 CurMax :=C[i];
 x := i;
 end;
 f := true;
 for j := 0 toM-1 do
 f := f and(Cons[j].A[i]
 if (f) then
 begin
 Result :=SIMPLEX_NO_BOTTOM;
 exit;
 end;
 end;
 end;
 if (opt) then
 Result :=SIMPLEX_DONE
 else
 begin
 //зная номер ведущего столбца, ищем номер ведущей строки
 CurMax := MaxExtended; //на самом деле тут будем искатьминимум, а не Max
 for j := 0 to M-1 do
 if (Cons[j].A[x] > 0) then //идем только по положительнымэлементам
 if (Cons[j].B/Cons[j].A[x]
 begin
 CurMax :=Cons[j].B/Cons[j].A[x];
 y := j;
 end
 else if(DoPrec(Cons[j].B/Cons[j].A[x] — CurMax) = 0) then
 if(Cons[j].isT) then
 y := j;
 //сохраняем текущие значения
 SetLength(temp, M);
 for j := 0 to M-1 do
 begin
 SetLength(temp[j].A,N);
 for i := 0 toN-1 do
 temp[j].A[i]:= Cons[j].A[i];
 temp[j].B :=Cons[j].B;
 end;
 SetLength(tempC,N);
 for i := 0 toN-1 do
 tempC[i] := C[i];
 //делаем пересчеттаблицы
 //строка делиться наведущий элемент
 MulString(y, 1/Cons[y].A[x]);
 //преобразованиеостальных элементов
 for j := 0 to M-1 do
 begin
 if (j y) then
 begin
 for i := 0 toN-1 do
 begin
 Cons[j].A[i]:= DoPrec(temp[j].A[i] — temp[j].A[x]*temp[y].A[i]/temp[y].A[x]);
 end;
 Cons[j].B :=DoPrec(temp[j].B — temp[j].A[x]*temp[y].B/temp[y].A[x]);
 end
 else
 begin
 for i := 0 toN-1 do
 Cons[j].A[i]:= DoPrec(Cons[j].A[i]);
 end;
 end;
 //и строка скоэффициентами функции
 for i := 0 to N-1 do
 begin
 C[i] :=DoPrec(tempC[i] — tempC[x]*temp[y].A[i]/temp[y].A[x]);
 end;
 Basis[y] := x;
 //и сама функция:
 L := DoPrec(L — tempC[x]*temp[y].B/temp[y].A[x]);
 for i:= 0 toM-1 do
 SetLength(temp[i].A,0);
 SetLength(temp,0);
 SetLength(tempC,0);
 Result :=SIMPLEX_NEXT_STEP;
 end;
end;
functionTSimplex.Solve: integer;
var
 i,j:integer;
 Simplex:TSimplex;
 f: boolean;
 Step:integer;
 cc:extended;
begin
 //oldN := N;
 NormaliCe;
 f:=false;
 if (notCheckBasis) then begin
 Simplex:=TSimplex.CreateBasis(self);
 Simplex.Solve;
 f:=Simplex.GetMin0;
 if (not f)then for i:=0 to M-1 do begin
 for j:=0 toN-1 do Cons[i].A[j]:=Simplex.Cons[i].A[j];
 Cons[i].B:=Simplex.Cons[i].B;
 Cons[i].isT:= false;
 Basis[i]:=Simplex.Basis[i];
 cc :=C[Basis[i]];
 for j:=0 toN-1 do
 C[j] :=DoPrec(C[j] — cc*Cons[i].A[j]);
 L := DoPrec(L- cc*Cons[i].B);
 end;
 Simplex.Free;
 end;
 if (f) thenStep:=SIMPLEX_NO_SOLUTION
 else repeat
 Step:=SimplexStep;
 until(StepSIMPLEX_NEXT_STEP);
 //SetAllLengths(OldN);
 Result:=Step;
end;
{ TIntSimplex}
constructorTIntSimplex.Create(_C:TExtArray; MaximiCe:boolean=false);
begin
 //CurFound:=false;
 inherited;
end;
functionTIntSimplex.GetIntMin: extended;
begin
 Result:=GetMin;
end;
functionTIntSimplex.GetIntSolution: TExtArray;
begin
 Result:=GetSolution;
end;
functionTIntSimplex.IsInteger(Value:extended):boolean;
begin
 Result:=((Value=floor(Value))or (Value=ceil(Value)));
end;
functionTIntSimplex.IntSolve: integer;
var
 i: integer;
 OldN: integer;
 FractCol: integer;
 FractRow: integer;
 TmpX: TExtArray;
 TmpCons: TExtArray;
 NewValue: extended;
begin
 if(Solve=SIMPLEX_DONE) then begin
 //if (notCurFound or ((Simplex.GetMinCurL)and Max)) then begin
 TmpX:=GetSolution;
 i:=0;
 while((i
 FractCol:=i;
 if (FractColRealN) then begin // если найдена хотя бы одна нецелая переменная
 OldN:=N;
 SetLength(TmpCons,N);
 FractRow :=FoundInBasis(FractCol);
 for i := 0 toN-1 do
 if(FoundInBasis(i) = -1) then
 TmpCons[i] :=Cons[FractRow].A[i] — Floor(Cons[FractRow].A[i])
 else
 TmpCons[i] :=0;
 NewValue :=Cons[FractRow].B — Floor(Cons[FractRow].B);
 //if (Max)then
 AddCons(NewValue,TmpCons, Greater);
 //else
 // AddCons(NewValue,TmpCons, Less);
 Result :=IntSolve;
 SetAllLengths(OldN);// удаляем пустыестолбцы в конце, если они есть
 end
 else begin // если полученное решение — целочисленное\
 Result := SIMPLEX_DONE;
 end;
 //end;
 end
 else
 Result:=SIMPLEX_NO_SOLUTION;
end;
end.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.