Диплом на тему Разработка алгоритмического и программного обеспечения ситуационного управления безопасностью
Работа добавлена на сайт bukvasha.net: 2015-06-30Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА БАКАЛАВРА
Направление 230100
Информатика и вычислительная техника
Разработка алгоритмического и программного обеспечения ситуационного управления безопасностью магистральных газопроводов
Содержание
Введение
1. Аварийные ситуации на магистральных газопроводах
1.1 Классификация чрезвычайных ситуаций
1.2 Аварии и их характеристики
1.3 Причины возникновения аварий на магистральных газопроводах
1.4 Причины роста числа аварий на объектах нефтегазового профиля
2. Методика анализа риска
2.1 Существующие методы анализа риска
2.2 Идентификация опасностей
2.2 Оценка риска: анализ частоты аварий
2.4 Оценка риска: анализ возможных последствий аварий
3. Ситуационный подход к управлению безопасностью потенциально опасных производственных объектов
3.1 Принципы ситуационного управления
3.2 Функции и структура системы ситуационного управления
3.3 Схема программы управления безопасностью магистральных газопроводов
4. Программное обеспечение ситуационного управления безопасностью магистральных газопроводов
4.1 Описание программы управления безопасностью магистральных газопроводов
4.2 Руководство по эксплуатации
4.3 Контрольный пример
5. Техническое обеспечение
Заключение
Библиографический список
Приложение А
Введение
Деятельность человека в любой сфере всегда связана с риском. Он может быть меньшим или большим, но избежать его невозможно. Одним из основных мотивов жизнедеятельности человека является безопасность, которая в условиях неопределенности, охватывающей все стороны жизни человека, неизбежно связана с риском. Риск - это сочетание частоты (вероятности) и последствий определенного опасного события.
Риск - явление, которое имеет множество не совпадающих, иногда противоречивых реальных оснований.
Ситуация риска среди множества видов ситуаций занимает особое место, так как функционированию и развитию многих техногенных, природных и общественных процессов присущи элементы неопределенности, что обусловливает появление ситуаций, которые не имеют однозначного исхода. Следовательно, если существует возможность качественно или количественно определить вероятность альтернативных вариантов, это и будет ситуация риска.
Таким образом, рискованная ситуация связана с процессами, которым сопутствуют: наличие неопределенности, необходимость выбора альтернативы, возможность оценить вероятность выбираемых альтернатив.
Ситуация риска качественно отличается от ситуации неопределенности. В ситуациях неопределенности вероятность наступления результатов исходов в принципе не устанавливаема. Рискованная ситуация представляет собой разновидность неопределенной, которую характеризуют события, наступление которых вероятно и может быть определено.
Оценка опасностей различного происхождения и разработка на этой основе оптимальных мероприятий представляют одну из ключевых проблем управления безопасностью.
Никаких опасностей вне зависимости от нас и нашей деятельности в природе и технических системах как таковых не существует. Опасными или безопасными являются сами наши системы деятельности, и зависит это не от свойств объектов, систем или природных процессов, с которыми нам приходится иметь дело, а от наличия или отсутствия соответствующей системы знаний, форм организаций, методов и средств работы с конкретной технической системой и протекающими в ней процессами в конкретных условиях.
Действующие магистральные и внутрипромысловые нефтегазопродуктопроводы представляют собой сложные технические системы, обладающие мощным энергетическим потенциалом и охватывающие 35% территории страны, на которой проживает 60% ее населения.
Строительство и эксплуатация магистральных газопроводов приводит к губительным геоэкологическим последствиям.
Источники воздействия: объекты, по которым транспортируется природный газ; землеройная, грузоподъемная, транспортная техника, применяемая при строительстве, эксплуатации и техническом обслуживании трубопроводов.
Виды воздействия: химическое загрязнение воздуха; термическое (при возгорании газа); ударная волна при взрыве газа; разрушение природных ландшафтов.
Наиболее чувствительный экологический ущерб наносится в результате аварий на магистральных трубопроводах. При разрушении магистрального газопровода и мгновенном высвобождении энергии газа возникают механические повреждения природного ландшафта и рельефа, нарушение целостности почвенно-растительного покрова. При возгорании газа механическое и бризантное воздействие сопровождается термическим воздействием с соответствующим синергетическим поражением территорий радиусом до 540 м от очага аварии. Отмечается разлет фрагментов трубопровода на 480 м [11].
По данным, представленным в 1996 г. Канадской ассоциацией трубопроводных компаний, прямой ущерб от аварии на магистральном газопроводе большого диаметра в среднем составляет 1 млн. долл. К прямому ущербу отнесены: затраты на ремонт трубопровода, восстановление поврежденной собственности, стоимость потерянного при аварии газа (продукта).
Обеспечение надежной и безопасной эксплуатации магистральных газопроводов является важнейшей задачей обществ, эксплуатирующих газотранспортные системы. От этого во многом зависит нормальная деятельность производственного персонала, жителей населенных пунктов, а также экологическая безопасность функционирования газовых магистралей.
1. Аварийные ситуации на магистральных газопроводах
1.1 Классификация чрезвычайных ситуаций
Чрезвычайная ситуация (ЧС) - это обстановка на определенной территории, сложившаяся в результате аварии, опасного природного явления, катастрофы, стихийного или иного бедствия, которая может повлечь или повлекла за собой человеческие жертвы, ущерб здоровью людей или окружающей природной среде, а также значительные материальные потери и нарушение условий жизнедеятельности.
В действующем постановлении Правительства Российской Федерации "О классификации чрезвычайных ситуаций природного и техногенного характера" в качестве критерия тяжести чрезвычайной ситуации используется количество пострадавших. Чрезвычайные ситуации классифицируются в зависимости от количества людей, пострадавших в этих ситуациях, людей, у которых оказались нарушены условия жизнедеятельности, размера материального ущерба, а также границы зон распространения поражающих факторов чрезвычайных ситуаций.
ЧС подразделяются на локальные, местные, территориальные, региональные, федеральные и трансграничные.
1.2 Аварии и их характеристики
К сожалению, количество аварий во всех сферах производственной деятельности неуклонно растет. Это происходит в связи с широким использованием новых технологий и материалов, нетрадиционных источников энергии, массовым применением опасных веществ в промышленности и сельском хозяйстве.
Современные сложные производства проектируются с высокой степенью надежности, порядка . Иначе говоря, если этот объект единственный, то авария на нем может произойти один раз в 10 тыс. лет. Но если таких объектов будет 10 тыс. единиц, то ежегодно один из них статистически может быть аварийным. Следовательно, абсолютной безаварийности не существует. При этом, чем выше безопасность объекта, тем последствий аварии больше.
Независимо от производства, в подавляющем большинстве случаев аварии имеют одинаковые стадии развития.
На первой из них аварии обычно предшествует возникновение или накопление дефектов в оборудовании, или отклонений от нормального ведения процесса, которые сами по себе не представляют угрозы, но создают для этого предпосылки. Поэтому еще возможно предотвращение аварии.
На второй стадии происходит какое-либо инициирующее событие, обычно неожиданное. Как правило, в этот период у операторов не бывает ни времени, ни средств для эффективных действий.
Собственно авария происходит на третьей стадии, как следствие двух предыдущих.
В зависимости от вида производства, аварии и катастрофы на промышленных объектах и транспорте могут сопровождаться взрывами, выходом ОХВ, выбросом радиоактивных веществ, возникновением пожаров и т.п.
Основные опасности нефтегазодобывающих производств, которые могут привести к возникновению чрезвычайных ситуаций, связаны с авариями в виде пожара, взрыва или токсического выброса. Прогнозирование и предупреждение последствий аварий на таких производствах связано, прежде всего, с прогнозированием и предупреждением действия поражающих факторов при реализации основных опасностей. При всем многообразии возможных сценариев аварий набор поражающих факторов ограничен. Это дает возможность описывать физические воздействия, приводящие к нанесению ущерба людям, материальным ценностям и окружающей среде, конечным числом параметров.
Основные поражающие факторы аварий представлены в таблице 1.1
Таблица 1.1 - Основные поражающие факторы аварий на промышленно опасных объектах
Разновидность аварии | Поражающие факторы | Параметры поражающего действия |
Пожар, огненный шар | пламя; тепловое излучение | Определение полей поражающих факторов сводится к определению границ зоны пламени и определению текущих значений теплового потока в зависимости от удаления от внешней границы зоны пламени. |
Взрывы (в т. ч. взрывы топливовоздушных смесей) | воздушные ударные волны; летящие обломки различного рода объектов технологического оборудования | Параметры поражающего действия воздушной ударной волны - избыточное давление во фронте волны и ее импульс в зависимости от расстояния от места взрыва. Параметры, определяющие поражающее действие осколков, - количество осколков, их кинетическая энергия, направление и расстояние разлета. |
Токсический выброс | химическое заражение | Параметрами, характеризующими токсические нагрузки при токсическом выбросе, являются поля концентраций вредного вещества и времена действия поражающих концентраций. |
Перечисленные поражающие факторы являются основными для рассматриваемых видов аварий. Однако следует учитывать, что при аварии действует несколько поражающих факторов. Так, при пожаре значительным может быть воздействие токсичных продуктов горения. При взрыве больших масс взрывчатых веществ могут иметь место значительные сейсмические последствия, приводящие к обрушению по этой причине. Поэтому при прогнозировании последствий аварий необходимо учитывать все возможные поражающие факторы и выделять основные из них только после анализа возможности их реализации.
Экспертная оценка вероятности проявления основных поражающих факторов при техногенных авариях представлена на рис.1.1 [8].
Рисунок 1.1 - Вероятность основных поражающих факторов при техногенных авариях: 1 - разрушение, обрушение зданий и сооружений; 2 - пожар; 3 - осколки и разлетающиеся фрагменты оборудования; 4 - столкновение (удар) с элементами конструкций; 5 - отравление токсичными продуктами; 6 - прямые поражения ударными волнами
Из рисунка видно, что тяжесть последствий при действии различных поражающих факторов существенно различна. В частности, обрушение зданий и конструкций практически всегда приводит к тяжелым последствиям, в то время как последствия воздействия поражающих факторов при пожаре, как правило, не столь катастрофичны для персонала.
1.3 Причины возникновения аварий на магистральных газопроводах
С 1992 по 2001 г. на объектах магистральных трубопроводов произошло 545 аварий. Среднегодовой показатель аварийности составляет 50-60 аварий и в целом не имеет устойчивой тенденции к снижению [11].
Основные причины аварий на объектах магистральных трубопроводов:
внешние физические (силовые) воздействия на трубопроводы, включая криминальные врезки, повлекшие утечки;
нарушения норм и правил производства работ при строительстве и ремонте, отступления от проектных решений;
коррозионные повреждения труб, запорной и регулирующей арматуры;
нарушения технических условий при изготовлении труб и оборудования;
ошибочные действия эксплуатационного и ремонтного персонала.
Основной причиной аварий на действующих газопроводах за предыдущие годы является стресс-коррозия (табл.1.2). Отмечается тенденция роста аварий по этой причине. Если за период с 1990 по 2000 годы средний показатель аварий из-за коррозии под напряжением составил 22,5% от числа общих аварий, то 2000 году - 37,8% [7].
Таблица 1.2 - Основные причины аварий на газопроводах
Причины аварий | % от общего числа |
1 | 2 |
Наружная коррозия | 28,9 |
в т. ч. по КРН | 22,5 |
Механические повреждения | 19,0 |
Брак строительно-монтажных работ | 21,9 |
в т. ч. брак сварки | 13,0 |
Дефекты труб | 11,4 |
Стихийные бедствия | 9,5 |
1.4 Причины роста числа аварий на объектах нефтегазового профиля
Переход в нашей стране к рыночным принципам хозяйствования, появление новых видов и форм собственности, резкое ухудшение на данном этапе развития материально-финансового положения большинства промышленных предприятий, значительное физическое и моральное старение оборудования и другие факторы привели в конечном итоге к значительному росту числа крупных аварий с социальными и экономическими последствиями и, в первую очередь, на объектах нефтегазового профиля.
Перечисленные причины повышения аварийности были очевидны для специалистов, и пять, и десять лет назад. Тем не менее, на протяжении этих лет ситуация оставалась качественно неизменной, а по количественным параметрам ухудшалась. В связи с этим необходимо задаваться вопросом: почему сложившаяся ситуация воспроизводится. Это несмотря на то, что в период 1996 - 2002 гг. в отрасли был реализован целый комплекс мероприятий по внедрению достижений научно-технического прогресса.
Можно выделить основные проблемы, решение которых позволит в некоторой степени уменьшить аварийность объектов газового профиля.
Во-первых, основной упор делается на противодействие видимым (актуальным на сегодня) опасностям в ущерб деятельности по профилактике опасностей на стадии проектирования и ранних стадиях жизненного цикла объекта.
Во-вторых, происходит многократное повторение и тиражирование однотипных ЧС, по причине отсутствия механизмов учета опыта расследования инцидентов, отказов и аварий в профилактике ЧС на стадиях проектирования, строительства, реконструкции и эксплуатации объекта.
Кроме того, можно отметить недостаточную эффективность действующих служб мониторинга. Службы отслеживания фактической обстановки на предприятиях, как правило, ограничиваются фиксацией "физических" явлений и процессов, они не встроены в системы, обеспечивающие синтез и анализ наблюдений, принятие управленческих решений и корректировку собственной деятельности.
2. Методика анализа риска
Методология анализа и управления риском позволяет учесть как вероятностную природу аварий, так и совокупное влияние всех факторов, которые определяют характер их развития и масштабы воздействий на человека и среду его обитания. Используя количественные показатели риска, возможно не только оценить потенциальную опасность, но и сравнить опасности различной природы.
Риск рассматривается в качестве универсального средства измерения и сравнения различных опасностей в рамках одной шкалы.
Методология анализа риска включает расчет вероятности появления нежелательного события и оценку последствий.
Анализ риска рассматривают как часть системного подхода к принятию процедур и практических мер в решении задач предупреждения или минимизации опасностей для жизни человека, ущерба имуществу и окружающей среде.
Анализ риска базируется на собранной информации и определяет меры по контролю безопасности технологической системы. Поэтому основная задача анализа риска заключается в том, чтобы обеспечить рациональное основание для принятия решений в отношении риска.
Анализ риска, или риск-анализ, - это систематическое использование имеющейся информации для выявления опасностей и оценки риска для отдельных лиц или групп населения, имущества или окружающей среды.
Здесь риск - это сочетание частоты (вероятности) и последствий определенного опасного события. Понятие риска включает два элемента: частоту, с которой осуществляется опасное событие, и последствия опасного события [4].
Анализ риска заключается в выявлении (идентификации) опасностей и оценке риска. Под опасностью понимается источник потенциального ущерба или вреда или ситуация с возможностью нанесения ущерба. Идентификация опасности - процесс выявления и признания, что опасность существует, и определение ее характеристик.
Таким образом, применение понятия риск позволяет переводить опасность в разряд измеряемых категорий.
Анализ риска проводится по следующей схеме:
Планирование и организация работ;
Идентификация опасностей;
Оценка риска;
Разработка рекомендаций по управлению риском.
2.1 Существующие методы анализа риска
Обычно выбор методов анализа риска строго не регламентируется. При выборе необходимо учитывать этап разработки системы, цели анализа, тип анализируемой системы и характер опасности, наличие ресурсов для проведения анализа и другие факторы.
Метод риск-анализа должен удовлетворять следующим требованиям: метод должен быть научно обоснован и соответствовать рассматриваемой системе; метод должен давать результаты в виде, позволяющем лучше понимать характер риска и намечать пути борьбы с этим риском; метод должен быть повторяемым и проверяемым.
Классификация методов анализа риска представлена на рис.2.1
Рисунок 2.1 - Классификация методов анализа риска
Методы могут применяться изолированно или в дополнение друг к другу, причем, качественные методы могут включать количественные критерии риска (в основном, по экспертным оценкам с использованием, например, матрицы "вероятность - тяжесть последствий" ранжирования опасности).
Рассмотрим коротко эти методы.
Методы проверочного листа и "Что будет, если…?" или их комбинация относятся к группе качественных методов оценки опасности, основанных на изучении соответствия условий эксплуатации объекта или проекта действующим требованиям промышленной безопасности.
Метод "Анализ опасности и работоспособности" кроме идентификации опасностей и их ранжирования, позволяет выявить неточности в инструкциях по безопасности и способствует их дальнейшему совершенствованию.
Если для анализа отклонений от регламента лучше подходит метод "Анализ опасности и работоспособности", то для анализа оборудования лучшим является метод "Анализ видов и последствий отказов". Существенной чертой метода является рассмотрение каждого блока или составной части системы (элемента) на предмет того, как он стал неисправным (вид и причина отказа) и какое было бы воздействие отказа на техническую систему.
Анализ вида и последствий отказа можно расширить до количественного "Анализа видов, последствий и критичности отказов". В этом случае каждый вид отказа ранжируется с учетом двух составляющих критичности - вероятности (частоты) и тяжести последствий отказа.
Понятие критичности близко к понятию риска и может быть использовано при более детальном количественном анализе риска аварии. Определение параметров критичности необходимо для выработки рекомендаций и приоритетности мер безопасности.
В табл.2.1 приведены рекомендуемые показатели уровня и критерии критичности по вероятности и тяжести последствий отказа. При этом необходимо выделять четыре группы, которым может быть нанесен ущерб от аварии: персонал, население, окружающая среда, материальные объекты.
Таблица 2.1 - Пример матрицы "Вероятность - тяжесть последствий"
Ожидаемая частота возникновения (1/год) | Тяжесть последствий | ||||
| Катастро-фический отказ | Крити-ческий отказ | Некри-тический отказ | Отказ с прене-брежимо малыми послед-ствиями | |
1 | 2 | 3 | 4 | 5 | 6 |
Частый отказ | >1 | А | А | А | С |
Вероятный отказ | 1- | А | А | В | С |
Возможный отказ | - | А |
В
В
Д
Редкий отказ
-
А
В
С
Д
Практически невероятный отказ
<
В
С
С
Д
Ранг А соответствует наиболее высокой (неприемлемой) степени риска объекта, требующей незамедлительных мер по обеспечению безопасности. Показатели В, С отвечают промежуточным степеням риска, а ранг Д - наиболее безопасным условиям.
Метод применяется для анализа проектов сложных технических систем или при модификации опасных производств.
Метод ранжирования опасностей и определения степени риска промышленного объекта является смешанным количественным методом, сочетающим численные методы с экспертными оценками в виде штрафов в зависимости от опасности веществ и материалов, используемых в технологических процессах. Метод применяют для оценки потенциальной опасности узлов технологического оборудования в зависимости от характера и условий протекания технологических процессов и категорирования по критериям взрыво-, пожароопасности и токсичности. Таким образом, метод косвенно применим для количественной оценки экологических последствий.
Крупные аварии, как правило, характеризуются комбинацией случайных событий, возникающих с различной частотой на разных стадиях возникновения и развития аварии. Для выявления причинно-следственных связей между этими событиями используют логико-графические методы анализа "Деревьев отказов" и "Деревьев событий".
При анализе "деревьев отказов" выявляются комбинации отказов (неполадок) оборудования, инцидентов, ошибок персонала и нерасчетных внешних воздействий, приводящих к головному событию (аварийной ситуации). Метод используется для анализа возможных причин возникновения аварийной ситуации и расчета ее частоты (на основе знания частот исходных событий).
Анализ "дерева событий" - алгоритм построения последовательности событий, исходящих из основного события (аварийной ситуации). Частота каждого сценария развития аварийной ситуации рассчитывается путем умножения частоты основного события на условную вероятность конечного события.
Конечным результатом оценки риска является перечень исходов для каждого рассматриваемого случая, при этом рассчитываются частота и последствия, т.е. величины ожидаемых последствий. Суммирование произведений из всех последствий определяет серьезность аварии.
Количественный анализ риска наиболее эффективен на стадии проектирования и размещения опасных объектов; при оценке безопасности объектов, имеющих однотипное оборудование (в частности, магистральные газопроводы); при необходимости получения комплексной оценки воздействия аварий на людей, материальные объекты и окружающую природную среду.
Недостатками количественного анализа риска являются невысокая точность результатов, вследствие чего использование количественных показателей (в частности, вероятности возникновения аварии) в качестве критериев безопасности для сложных производств, какими являются магистральные газопроводы, как правило, не оправдано.
Для анализа или модернизации сложных проектов (в частности, управления безопасностью магистральных газопроводов) целесообразно применять методы анализа "деревьев отказов" и "деревьев событий".
Объекты транспорта газа относятся к организационно-ситуационным и обладают рядом свойств, отличающих их от традиционных объектов управления: уникальностью, неформализованностью описания, функциональной ситуационностью, неполнотой исходной информации. При работе с такими объектами не эффективно использовать традиционные методы управления, поэтому целесообразно применять ситуационный подход.
2.2 Идентификация опасностей
Установлено, что расследуется и анализируется не более 20-30% от общего количества аварийных ситуаций. Кроме того, нередко допускаются неточности в классификации аварийных ситуаций, таких как "утечки" или неполадки. Поэтому возникает необходимость правильно и полно классифицировать возможные отказы линейной части магистральных газопроводов.
Отказы разделяются по нескольким критериям.
По этапам формирования: проектный, производственный, эксплуатационный.
По виду отказавшего конструктивного элемента: отказ трубных секций, сварных соединений, изоляционного покрытия, траншей, балластирующих устройств, грунтовой засыпки, ЭХЗ.
По влиянию на эффективность функционирования магистрального газопровода: полный отказ, частичный отказ.
По взаимному влиянию отказов: зависимый и независимый.
По последствиям отказов: отказ с незначительными, значительными и критическими последствиями.
Отказ линейной части магистрального газопровода наступает в основном из-за совокупного влияния дефектов конструктивных элементов.
Регистрируемые в настоящее время отказы линейной части магистрального газопровода являются в основном отказами двух его основных конструктивных элементов - металла трубопровода или сварных соединений.
Классификация дефектов трубных секций представлена на рис.2.2.
Рисунок 2.2 - Классификация дефектов трубных секций
Классификация дефектов сварных швов представлена на рис.2.3.
Рисунок 2.3 - Классификация дефектов сварных соединений
Различают отказы двух принципиально разных групп:
Отказ линейной части магистрального газопровода вследствие отказа металла трубных секций или отказа сварных соединений - элементы группы А.
Отказ линейной части магистрального газопровода вследствие отказа остальных конструктивных элементов, выражающийся в потере герметичности металла трубных секций или металла сварных соединений - элементы группы Б.
Число состояний объекта, состоящего из семи конструктивных элементов, находящихся в одном из двух состояний - работоспособном и неработоспособном - равно: . Так как к отказу могут привести только такие комбинации отказовых состояний, при которых имеет место отказ металла или сварного соединения, то количество отказовых состояний равно
.
Значит, 31 состояние системы приводит к отказам магистрального газопровода.
Отказовое состояние регистрируется в случаях:
разрушения основного металла труб;
разрушения сварных соединений газопровода.
Причем , где - вероятность отказа из-за разрушения металла труб, - вероятность отказа из-за разрушения сварных соединений.
В свою очередь, , где
- вероятности отказа из-за прямого отказа конструктивных элементов группы А;
- вероятности отказа из-за отказов конструктивных элементов группы Б.
На основе статистических данных установлено, что
, . Следовательно, .
На основе полученных данных можно прогнозировать среднее время безотказной работы магистральных газопроводов.
Для реализации концепции принятия решения с целью воздействия на факторы риска с позиции мотивации безопасной деятельности необходимо использовать метод, обеспечивающий сравнение факторов на основе какого-либо рода экспертных оценок - метод анализа иерархий, состоящий в декомпозиции проблемы на более простые составляющие части и дальнейшей обработке последовательности суждений лиц, принимающих решение, по парным сравнениям.
Наиболее опасными с точки зрения разгерметизации магистрального газопровода являются следующие дефекты: трещина и технологическая трещина в металле трубы [12].
2.2 Оценка риска: анализ частоты аварий
Оценка риска - это процесс, используемый для определения степени риска анализируемой опасности для здоровья человека, имущества или окружающей среды. Понятие "степень риска" идентично понятию "риск".
Под приемлемым уровнем риска понимается риск, уровень которого допустим и обоснован, исходя из экономических и социальных факторов. Риск эксплуатации потенциально опасного объекта будет являться приемлемым в том случае, если его величина настолько незначительна, что ради выгоды, получаемой от эксплуатации объекта, общество готово пойти на этот риск.
Оценка риска включает в себя анализ частоты и анализ последствий.
Для оценки риска возникновения аварии на магистральном газопроводе, заключающейся в потере герметичности стенок трубы и сварных соединений, используется метод построения и анализа дерева неполадок и дерева событий.
Графическая форма дерева неполадок, используемого для анализа причин разгерметизации магистрального газопровода, представлена в приложении. Вершиной данного дерева является нежелательное событие - разгерметизация газопровода. Последовательность событий, которые приводят к нежелательному событию в вершине, образуют ветви дерева: дефекты газопровода, ошибки проведения технической диагностики, механизмы и нагружения. Промежуточные события обозначены прямоугольниками, постулируемые исходные события-предпосылки показаны кругами с цифрами (их наименования и нумерация приведены в табл.2.2). Для придания дереву неполадок большей информативности определяются вероятности появления различных событий.
Для связи между событиями в "узлах" деревьев используются знаки "И" и "ИЛИ". Логический знак "И" означает, что вышестоящее событие возникает при одновременном наступлении нижестоящих событий (соответствует перемножению вероятностей для оценки вероятности вышестоящего события). Знак "ИЛИ" означает, что вышестоящее событие может произойти вследствие возникновения одного из нижестоящих событий. Например, нарушение свойств металла труб и сваршвов может произойти вследствие либо механического, либо технологического нарушения.
По результатам численного анализа дерева неполадок могут быть выработаны различные рекомендации вариантов решений, на основе которых осуществляется управление процессом.
Дерево неполадок дает ясное представление о взаимосвязях внутри системы и о том, каким образом и по каким причинам возникают различные нежелательные события, которые могут повлиять на потерю герметичности магистрального газопровода.
Таблица 2.2 - Исходные события "Дерева отказов" [12]
№ | Наименование события-предпосылки | Вероятность события | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | Ошибки при проведении тех. диагностики
На рисунке 2.4 представлено дерево событий для ситуации "выброс газа". Рисунок 2.4 - Дерево событий для ситуации "выброс газа" Конструирование дерева событий происходит аналогично конструированию дерева неполадок. Оно начинается с определения инициирующего события. Каждая ветвь дерева событий представляет собой отдельный результат последовательности событий. Частота каждого сценария развития аварийной ситуации рассчитывается путем умножения частоты основного события на вероятность последующего. При этом сумма вероятностей событий, следующих из каждой точки разветвления дерева событий, равна единице (что, по существу, означает полноту описания возможных сценариев развития аварийной ситуации). Оценку вероятности событий проводят с использованием статистических данных или расчетными методами. При отсутствии статистических данных для вероятности мгновенного воспламенения истекающего продукта допускается принимать значение 0,05. Статистические вероятности различных сценариев развития аварий с выбросом горючего вещества приведены в таблице 2.3 Таблица 2.3 - Статистические вероятности сценариев развития аварий
Также по статистике степень аварийности трубопроводного транспорта . В 90% случаев происходит выброс содержимого через отверстие 1 дм в стенке трубопровода до тех пор, пока утечка не будет остановлена, в 10% случаев - полный разрыв трубопровода [8]. 2.4 Оценка риска: анализ возможных последствий аварий Анализ последствий включает оценку воздействий опасных факторов на людей, имущество или окружающую среду. Так как авария на опасных промышленных объектах может быть отнесена к случайным явлениям, то мера опасности может быть оценена при анализе случайных величин ущербов от аварии. Так, при рассмотрении события "отказ технического устройства" в теории надежности оперируют в основном дискретной характеристической случайной величиной X, которая равна 1, если за определенное время отказ происходит, и равна 0, если не происходит. События, связанные с крупными нежелательными последствиями в сложных системах, анализируют, рассматривая случайную величину потерь (ущербов) от аварии при эксплуатации опасных промышленных объектов - Y0. Количественные показатели риска аварии (индивидуальный, коллективный и социальный риски, ожидаемый ущерб) представляют собой характеристики случайной величины аварийных потерь Y. Определение "потенциальный территориальный риск" характеризует случайное событие - возникновение в определенной точке территории факторов аварии, достаточных для смертельного поражения человека. Этот риск определяется дискретной характеристической величиной D, равной 1, если за определенное время такое событие происходит, или равной 0, если не происходит. Потери Y разделяют на материальные G (непрерывная случайная величина) и людские N (дискретная случайная величина). В практике анализа риска аварии чаще оперируют не с вероятностями, а со средними интенсивностями (частотами) нежелательных событий за определенное время. Если рассматривать происходящие аварии как стационарный пуассоновский поток событий, то связь между вероятностью события А за время t и его интенсивностью такова: . Рассмотрим дискретную случайную величину людских потерь N при аварии на магистральном газопроводе с возможными значениями . Каждое из этих значений N может принять с некоторой вероятностью . Описание дискретной случайной величины N считается полным с точки зрения теории вероятностей, если установлен закон распределения случайной величины, который представляется в виде ряда распределения. Таблица 2.4 - Ряд распределения дискретной случайной величины N
Причем , - вероятность безаварийной эксплуатации опасного промышленного объекта. Чтобы придать ряду распределения более наглядный вид прибегают к его графическому изображению - строят многоугольник распределения. Для непрерывной случайной величины ряд распределения построить нельзя, поэтому воспользуемся другой характеристикой случайной величины потерь: . Ее называют F/N-кривой (диаграммой) или F/G-кривой. Это классическая функция распределения потерь, построенная в координатах , так как . Вероятность попадания случайной величины на заданный участок : . В частном случае, значение функции F/N при n=1 чел. Равно вероятности несчастного случая со смертельным исходом, связанного с аварией на магистральном газопроводе. Одна из основных целей оценки риска аварии - получение достоверных количественных показателей, пригодных для эффективного управления процессом обеспечения промышленной безопасности на опасных промышленных объектах. Оперирование неоднозначными исходными данными дает такие же неоднозначные практические рекомендации и результаты управления. Для более удобного построения F/N-кривых выражение представим в развернутом виде:
Для непрерывной случайной величины материальных потерь при аварии G может быть определена функция плотности распределения: . Математическое ожидание дискретной случайной величины N (коллективный риск) определяется: . Если ввести в рассмотрение случайную величину числа рискующих попасть в аварию U, то общее выражение для среднего по группе рискующих индивидуального риска : , где - корреляционный момент случайных величин N и 1/U. В частном случае при U=const , где u - общее число рискующих людей. Математическое ожидание непрерывной случайной величины G (ожидаемый ущерб) определяется: . В терминах теории вероятностей основные показатели, используемые при анализе риска аварии на опасном промышленном объекте представлены в таблице 2.5. Таблица 2.5
3. Ситуационный подход к управлению безопасностью потенциально опасных производственных объектов 3.1 Принципы ситуационного управления Под ситуационным управлением понимают управление, основанное на выявлении проблемных ситуаций и выполнении различных преобразований имеющейся информации в управленческие решения, приводящие к их разрешению. Под ситуацией в общем случае понимается сочетание условий и обстоятельств, создающих определенную обстановку, положение. При исследовании организационно-технических систем управления выделяют такие понятия, как состояние, ситуация и событие (воздействие). Под состоянием понимают систематически наблюдаемое свойство, качество, значение определенных параметров, определяющих характеристики структуры управления. Под ситуацией подразумевают реализованные или ожидаемые предыстории состояний за некоторый интервал времени (прогнозируемые состояния). Предыстории могут отражать прошлое, настоящее или будущее состояние. При описании ситуаций обязательным элементом является описание и самого объекта, и системы управления с внешней средой. Под событием понимают воздействие, оказываемое на структуру управления (объект управления) извне или изнутри. Объект управления функционирует в определенной среде. Текущей ситуацией на объекте управления называют совокупность всех сведений о структуре объекта управления и его функционировании в данный момент времени. Обозначим текущие ситуации через . Полной ситуацией называют совокупность, состоящую из текущей ситуации, знаний о состоянии системы управления в данный момент и знаний о технологии управления. Полные ситуации обозначим через . При исследовании объекта управления обычно выделяют типовые (штатные) ситуации, соответствующие предусмотренным целям системы управления и не требующие вмешательства извне. Наряду с ними выделяют проблемные (критические, опасные) ситуации, когда определенные параметры приближаются к выходу за пределы допустимых значений и вызывают негативное воздействие на состояние объекта управления. Исследование проблемных ситуаций и их разрешение составляют содержание ситуационного управления. Ситуационный подход реализует требования системного подхода по конкретной реализации методов и концепций в конкретных ситуациях, по которым принимается решение. Данный подход является противопоставлением концепциям классической теории управления, основным тезисом которых являлось соответствие рациональным "принципам управления". Ситуационный подход ориентирован на тщательное изучение конкретных условий - ситуаций в управлении и гибкой адаптации организационно-управленческих форм и методов к специфике этих ситуаций. Ситуационный подход ориентирован на рассмотрение категорий "неопределенностей" при принятии решений по слабоструктурированным проблемам. Сущность концепции ситуационного управления сводится к следующему: каждому типу конкретной ситуации должна соответствовать своя последовательность процедуры управления (сценарий) со своими критериями и методами принятия решения, предоставляющая возможность адаптации структуры управления к динамически меняющимся условиям функционирования системы управления и внешней среды. В методе ситуационного управления обеспечивается построение модели объекта управления, построение процедуры управления им и поиск целесообразных решений по управлению им. Указанные особенности обеспечивают применимость этого метода, когда сложность объекта управления не позволяет строить его формальную математическую модель и ставить задачу управления в традиционном духе. 3.2 Функции и структура системы ситуационного управления Метод ситуационного управления базируется на следующей гипотезе: множество всех возможных полных ситуаций значительно мощнее, чем соответствующее ему множество принимаемых решений, т.е. . В качестве примера можно привести задачу управления автомобилем. Число возможных дорожных ситуаций - очень велико, а принимаемых решений по управлению мало (ускорение, торможение, поворот руля влево или вправо). Если множество полных ситуаций разбить на подмножества, каждому из которых можно поставить в соответствие единственное типовое решение, то задача управления, грубо говоря, сведется лишь к классификации поступающих на вход системы внешних ситуаций. Эта идея реализуется в рамках метода ситуационного управления, для чего разработан специальный язык представления и обработки описаний полных ситуаций. Любая ситуация характеризуется набором признаков. Пусть
- значения набора признаков. Среди компонент
могут быть количественные, качественные и классификационные признаки. Классификационные признаки отражают проявление некоторых свойств, позволяющих разбить совокупность свойств на классы , где - номер класса, к которому принадлежит свойство . Анализ ситуации в соответствии с классификационными признаками позволяет построить модель принятия решения в той или иной ситуации. На рисунке 3.1 приведена блок-схема традиционной системы ситуационного управления. Основой управления здесь является семиотическая (знаковая) модель, строящаяся в виде сети, где узлами являются внутренне непротиворечивые формальные модели, а переходы между узлами задаются правилами преобразования параметров формальных моделей -корреляционными или логико-трансформационными правилами (ЛТП). Построение семиотической модели осуществляется на языке ситуационного управления, представляющем собой достаточно сложное по структуре подмножество естественного языка. Рисунок 3.1 - Структура системы ситуационного управления. Здесь Анализатор по описанию текущей ситуации принимает решение о необходимости (или отсутствии таковой) применения какого-либо управления. Если управление необходимо, в действие вступает Классификатор, который должен отнести текущую ситуацию к одному или нескольким классам, соответствующим некоторому одношаговому управлению. Решение Классификатора передается Коррелятору, где хранятся все ЛТП. Если Коррелятору удается выбрать единственное ЛТП, то на объект выдается связанное с этим правилом управление; в противном случае подключается Экстраполятор, предназначенный для выбора управления путем экстраполяции и сравнения последствий всех альтернативных воздействий. Таким образом, в общей схеме ситуационного управления Коррелятор, Классификатор и Экстраполятор совместно решают следующую задачу: перечисленные блоки позволяют формировать последовательность решений, с помощью которой можно перевести текущую ситуацию в некоторую целевую. В силу конечности числа различных воздействий все множество возможных полных ситуаций распадается на классов, каждому из которых будет соответствовать одно из возможных воздействий на объект управления. То есть должны существовать такие процедуры (процедуры классификации), которые позволили бы классифицировать полные ситуации так, чтобы из них можно было образовать столько классов, сколько различных одношаговых решений есть в распоряжении системы управления. Между описанием ситуаций на естественном языке и внутренними представлениями информации о них в управляющей системе существует явный разрыв. Поэтому требуется преобразовывать словесные описания во внутреннее представление. Для этого необходимо получать специфическую информацию, связанную с функционированием Анализатора. Его задача состоит в классификации поступившей информации в соответствии с теми задачами, которые должна решать система управления. Эти задачи могут быть трех типов: пополнение системы новой информацией об объекте управления или способах управления, формирование ответа на некоторый запрос на основе информации, хранящейся в системе, поиск решения в ситуации, описание которой поступило в систему. Разделение этих задач на три класса нужно производить при преобразовании входного текста во внутреннее представление. Поэтому Анализатор можно рассматривать как составную часть лингвистического процессора. На рисунке 3.2 представлена традиционная структура лингвистического процессора, в котором анализ поступившего на вход текста идет по предложениям в порядке их поступления. Рисунок 3.2 - Структура лингвистического процессора Обратимся вновь к структуре системы ситуационного управления, представленной на рис.3.1 Центральной ее частью является Классификатор. С его помощью решается основная задача - получение классов ситуаций, каждый из которых однозначно или с определенными приоритетами соответствует тем или иным решениям по управлению. Очевидна важность роли процесса обобщения описаний и их классификации. Первая особенность задач формирования понятий и классификации в ситуационном управлении - поиск прагматических признаков классификации, способных обеспечить нахождение таких обобщенных описаний ситуаций, которые позволяли бы успешно решать задачу поиска решения по управлению объектом. Именно признаки выступают в качестве параметров, на основании которых происходит выделение обобщенных понятий и строится та или иная классификация. Вторая особенность задачи формирования понятий и обобщения ситуаций в рассматриваемой области - наличие процедур обобщения, основанных на структуре отношений, присутствующей в описании ситуаций. Наконец, третья особенность обсуждаемых процедур, характерных для всех систем, работающих со знаниями, - возможность работы с именами, присваиваемыми отдельным понятиям и ситуациям. Общая постановка задачи обобщения понятий и классификации имеет в данном случае следующий вид. На множестве конкретных ситуаций найти такое разбиение их на классы, при котором каждый класс имел бы в рамках данной модели управления некоторую "разумную" интерпретацию процесса управления ситуацией. На множестве полных ситуаций необходимо выделить такое множество классов , что каждый из них допускал бы "разумную" интерпретацию для процедуры поиска решения по управлению объектом. В частности, классификация по некоторому основанию должна быть согласована с классификацией на множестве воздействий (управлений) . Множество всех текущих ситуаций на магистральном газопроводе можно отнести к трем основным классам: безаварийная эксплуатация, предаварийное состояние, авария. В процессе функционирования системы ситуационного управления работа по формированию классов ситуаций и уточнению ранее сформированных классов происходит постоянно, так как обучающая выборка может не исчерпывать всего богатства возможных ситуаций, складывающихся на объекте управления. Обобщение может происходить на многих этапах, и поэтому исходные описания ситуаций и обобщенные их описания образуют иерархическую структуру, в каждом слое которой находятся описания, полученные из исходных с помощью тех или иных процедур обобщения. Если исходные описания принять за нулевой уровень, то на первом уровне будут находиться описания, полученные непосредственно из описаний ситуаций, лежащих на нулевом уровне. На второй уровень попадут описания, которые возникнут за счет применения процедур обобщения к описаниям первого уровня и т.д. Возникает как бы "слоеный пирог". Ситуации на всех уровнях соответствуют некоторым решениям по управлению. В идеале на самом верхнем уровне системы классификации возникают описания, каждому из которых соответствует определенное решение по управлению. Когда Классификатор сформирован, то его работа заключается в следующем. Если на вход системы управления поступает некоторая конкретная ситуация, то она обогащается за счет работы процедур пополнения описаний ситуаций и поступает на нулевой уровень "слоеного пирога". С помощью вертикальных связей она обобщается до наивысшего возможного уровня. Если на этом уровне ей соответствует решение по управлению, то оно поступает из Классификатора в Коррелятор. Если же при невозможности дальнейшего обобщения данному уровню не соответствует никакого решения, то Классификатор переходит в стадию обучения. Функциональная структура Классификатора представлена на рис.3.3.
Рисунок 3.3 - Схема функциональной структуры Классификатора Как отмечалось ранее, планировщики формируют последовательность решений, с помощью которой можно перевести текущую ситуацию в некоторую целевую. Планировщики сначала формируют план, затем проверяют его выполнимость и эффективность, отбирают среди сформированных наилучший план, начинают его выполнение и при необходимости корректируют план при поступлении дополнительной информации от объекта управления и окружающей среды. В данной работе используется планирование по состояниям. Понятие состояния складывается из состояния объекта управления и состояния окружающей среды. Построение плана происходит в пространстве состояний таким образом, что каждое одношаговое решение по управлению переводит систему из одного состояния в другое. План представляется в этом случае некоторой траекторией в пространстве состояний. Задачу планирования по состояниям можно описать некоторой моделью, представленной на рис.3.4.
Рисунок 3.4 - Сеть вывода управляющего решения При планировании в пространстве состояний необходимо найти путь, ведущий из начальной вершины (1) в какую-нибудь из вершин, символизирующих целевые ситуации или конечные состояния (9, 10 или 11). Таким образом, все разветвления в вершинах считаются альтернативными. Надо выбрать одно (любое) продолжение движения. Совокупность дедуктивного вывода, описание модели функционирования магистрального газопровода, связанных с ней программных модулей и закономерностей функционирования магистрального газопровода вместе с процедурами их проверки образуют интеллектуальный пакет прикладных программ. В виде такого пакета в данном случае выступает Коррелятор. Его основная компонента - набор логико-трансформационных правил вида: , где - описание фрагмента текущей ситуации, наличие которого определяет применимость логико-трансформационного правила; - описание преобразуемого фрагмента; - результирующее описание нового фрагмента описания. Если рассматривать , и как дескрипторы, а как некоторый спецификатор, то легко установить соответствие между функциональными моделями и набором логико-трансформационных правил, хранящихся в базе знаний. В задаче управления безопасностью магистральных газопроводов переходы между состояниями в пространстве состояний недетерминированы, что отражает неполноту знаний о возможностях таких переходов. В этом случае дуги сети, на которой производится планирование, взвешиваются значениями функции принадлежности. В идеале необходимо получить прогноз развития событий на уровне описания тех ситуаций, которые могут возникнуть в будущем. То есть необходимо получить экстраполяцию в виде перевернутого дерева, показанного на рис.3.5 Его корень соответствует ситуации на объекте в данный момент времени. Если в качестве решения планируется , то последующие ярусы дерева показывают те ситуации, в которые может попасть объект в результате реализации именно данного решения. Ветвление дерева соответствует той неопределенности, с которой можно представить процесс развертывания событий. Около каждой ситуации, лежащей на концевых ветвях дерева, проставлены оценки , характеризующие возможность такого исхода. Рисунок 3.5 - Дерево экстраполяции управленческих решений. Если в исходной ситуации кроме решения можно использовать некоторые другие решения, то для всех них строится имитационный процесс, порождающий свое дерево такого же типа, как на рис.3.5 Далее по некоторому решающему правилу оцениваются полученные в результате моделирования оценки и выбирается то решение , для которого решающее правило дает наилучший результат. Особенность описанного метода состоит в том, что при моделировании каждый раз имеется описание получаемой ситуации, а, значит, ее можно классифицировать с помощью Классификатора и оценивать ее конфликтность или неконфликтность для управления объектом. 3.3 Схема программы управления безопасностью магистральных газопроводов Схема программы формирования дерева событий и определения пути движения по нему (поиск наиболее вероятного сценария развития событий) приведена на рис.3.6. Поиск наименее вероятного сценария развития событий осуществляется аналогично, с той лишь разницей, что рассчитывается минимальная вероятность для выбранного следствия, а затем выбирается наименьшая из текущей и предыдущей. По этой же схеме определяется сценарий развития событий с максимальным /минимальным ущербом. Отличие состоит в том, что рассчитывается значение не вероятности, а возможного совокупного коэффициента ущерба.
Рисунок 3.6 - Схема процесса формирования дерева событий и поиска пути движения по нему.
4. Программное обеспечение ситуационного управления безопасностью магистральных газопроводов 4.1 Описание программы управления безопасностью магистральных газопроводов Программа предназначена для работы в операционных средах MicroSoft Windows 98/NT/XP. Windows обеспечивает удобный и наглядный интерфейс для осуществления операций с файлами, дисками и т.д. А также позволяет приложениям взаимодействовать с дисплеем, клавиатурой, мышью вне зависимости от конкретной модели устройства. Такая независимость от аппаратуры позволяет одному и тому же приложению работать на компьютерах с различной аппаратной конфигурацией. В качестве среды программирования была выбрана Delphi 7. Данный язык создает программы для операционной системы Windows, обеспечивает полную поддержку всех возможностей предоставляемых системой. Язык является полностью объектно-ориентированным, что позволяет легко моделировать необходимые модули программы. Большинство необходимых визуальных элементов уже встроены в оболочку и легко переносятся в проект. Основная концепция Delphi - это многомодульность. Объектно-ориентированный язык Delphi 7 позволяет сократить количество межмодульных вызовов и уменьшить объем информации, передаваемой между модулями, по сравнению с модульным программированием. Программное обеспечение "МАГ" представлено следующими модулями: Модуль формирования узлов дерева; Модуль обработки степени доверия; Модуль вопросов об объектах; Модуль использования правил базы знаний; Модуль поиска пути движения по дереву. Модуль формирования узлов дерева выполняет следующие функции: 1) создание нового узла в вершине дерева (см. рис.4.1); Рисунок 4.1 - Схема создания нового узла в вершине дерева 2) вставка узла в дерево после указанного узла (см. рис.4.2); Рисунок 4.2 - Схема процесса вставки узла в дерево после указаного. 3) поиск узла - осуществляется последовательным перебором всех узлов дерева; 4) просмотр узлов дерева - позволяет вывести на экран список всех объектов и их значений, содержащихся в базе данных. Модуль обработки степени доверия позволяет: 1) добавлять коэффициент доверия для каждого значения объекта; 2) изменять существующий коэффициент доверия; 3) извлекать коэффициент доверия из пары "объект-значение". Модуль вопросов об объектах выполняет следующие функции: 1) добавляет вопрос об объекте; 2) выводит существующий вопрос для заданного объекта; 3) позволяет пользователю ответить на вопрос об объекте. Модуль использования правил базы знаний позволяет: 1) добавлять к текущему правилу предпосылку; 2) добавлять к текущему правилу заключение; 3) считывать правила из текстового файла и заносить его в список правил базы знаний. Модуль поиска пути движения по дереву выполняет следующие функции: 1) выводит наиболее или наименее вероятный сценарий развития ситуации; 2) подсчитывает вероятности реализации событий; 3) подсчитывает возможный ущерб при реализации каждого сценария. В базе знаний хранятся сведения обо всех ситуациях, складывающихся либо на объекте транспорта газа, либо во внешней среде и связанных с возникновением аварии. В программе понятие "ситуация" определено как "объект". Для каждой ситуации определяются возможные пути трансформации текущей ситуации в другие ситуации ("значения объекта"). Каждое значение тот или иной объект может принимать с определенной степенью доверия, которая выражается относительной величиной - коэффициентом доверия (изменяется в пределах от 0 до 100). Кроме того, каждая ситуация характеризуется коэффициентом ущерба - некоторой неотрицательной величиной, определяющей сумму материальных затрат, направленных на ликвидацию последствий ситуации. Основной модуль программы - MAG. dpr. Модуль MainUnit описывает процедуру формирования "дерева" и поиска возможных путей движения по нему. В текстовом файле rules. txt хранятся все факты базы знаний и правила движения по "дереву". Текст программы приведен в приложении Б. 4.2 Руководство по эксплуатации Для запуска программы необходимо выбрать файл MAG. exe. На экране появится главная рабочая форма программы (рис.4.3). Рисунок 4.3 - Главная форма ПО "МАГ". Для того, чтобы наполнить базу знаний фактами, необходимо ввести имена объектов, их возможные значения коэффициенты доверия и коэффициенты ущерба. После чего нажать кнопку "1. Добавление факта в базу знаний" (рис.4.4). Рисунок 4.4 - Область добавления фактов в базу знаний Для проверки наличия в базе объекта с определенным значением необходимо ввести в соответствующее поле имя объекта и значение, а затем нажать кнопку "2. Проверить факт из базы" (рис.4.5). Рисунок 4.5 - Область проверки наличия фактов в базе Просмотреть все имеющиеся в базе факты можно, нажав кнопку "3. Просмотр фактов базы знаний". При этом результаты отобразятся в окне "Ход выполнения" (рис.4.3). Запись всех фактов в текстовый файл осуществляется при нажатии кнопки "Сохранить базу в файл". Для каждого объекта возможно добавление вопроса. Для этого необходимо ввести имя объекта и вопрос, после чего нажать кнопку "4. Добавить вопрос объекта" (рис.4.6). Рисунок 4.6 - Область добавления вопроса объекта. Кнопка "5.1. Получить вопрос об объекте" позволяет определить заданный по конкретному объекту вопрос. Для того, чтобы выбрать определенное значение ответа на вопрос, необходимо выбрать его порядковый номер и затем нажать кнопку "5.2. Ответить на вопрос об объекте" (рис.4.7). Рисунок 4.7 - Область получения ответа на вопрос Для определения наименее вероятного сценария развития событий необходимо ввести описание ситуации и нажать кнопку "6. Поиск наименее вероятного сценария развития событий". Результаты поиска отобразятся в окне "Ход выполнения". Для определения наиболее вероятного сценария развития событий необходимо ввести описание ситуации и нажать кнопку "7. Поиск наиболее вероятного сценария развития событий". Результаты поиска отобразятся в окне "Ход выполнения". Для поиска сценария с наименьшим возможным ущербом необходимо ввести описание ситуации и нажать кнопку "8. Поиск сценария с наименьшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения". Для поиска сценария с наибольшим возможным ущербом необходимо ввести описание ситуации и нажать кнопку "9. Поиск сценария с наибольшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения". Завершение работы программы осуществляется при нажатии кнопки "Выход". 4.3 Контрольный пример Для начала работы с программой необходимо запустить файл MAG. exe. После запуска файла на экране появится главная форма (рис.4.3). Сначала необходимо наполнить базу фактами. Для этого нужно ввести имена объектов, их возможные значения, коэффициенты доверия и коэффициенты ущерба. Например, объект "ветер на здание", значение "концентрация <1%", коэффициент доверия 35, коэффициент ущерба 79. Далее нажать кнопку "1. Добавление факта в базу знаний". Факт будет добавлен в базу знаний (рис.4.8). Рисунок 4.8 - Добавление факта в базу знаний Проверить факт на наличие в базе можно следующим образом. Ввести имя объекта ("ветер на здание") и его значение ("концентрация <1%"), затем нажать кнопку "2. Проверить факт из базы". В окне "Ход выполнения" появится информация "Факт верен" (рис.4.9). Рисунок 4.9 - Проверка наличия факта в базе (факт имеется) Если факт отсутствует в базе знаний (например, объект "ветер на здание" со значением "концентрация <10%"), то после нажатия кнопки "2. Проверить факт из базы" в окне "Ход выполнения" появится информация "Факт неверен" (рис.4.10).
Рисунок 4.10 - Проверка наличия факта в базе (факт отсутствует) Чтобы просмотреть все имеющиеся в базе факты необходимо нажать кнопку "3. Просмотр фактов базы знаний". В окне "Ход выполнения" отобразятся все имеющиеся в базе факты (рис.4.11).
Рисунок 4.11 - Просмотр всех имеющихся в базе фактов Для того, чтобы добавить вопрос объекта, необходимо ввести имя объекта, например "ветер на здание", и вопрос - "какова концентрация". После этого нажать кнопку "4. Добавить вопрос объекта" (рис.4.12). Рисунок 4.12 - Добавление вопроса об объекте Все имеющиеся в базе факты, включающие сведения об объектах, их значениях, коэффициентах доверия, коэффициентах ущерба и вопросах, можно сохранить в текстовый файл rules. txt. Для этого необходимо нажать кнопку "Сохранить базу в файл". Файл rules. txt будет иметь следующее содержание - рис.4.13. Рисунок 4.13 - Содержание файла rules. txt Для того, чтобы получить вопрос об объекте, необходимо ввести имя объекта ("ветер на здание") и нажать кнопку "5.1. Получить вопрос об объекте". В поле "Вопрос" выведется имеющийся в базе вопрос о данном объекте ("какова концентрация"). Для установления конкретного (одного) значения объекта из нескольких имеющихся (например, значения "концентрация <1%" для объекта "ветер на здание") необходимо выбрать номер значения 2 и нажать кнопку "5.2. Ответить на вопрос об объекте" (рис.4.14).
Рисунок 4.14 - Установка ответа на вопрос Для ситуации "выброс газа" определим наименее вероятный сценарий развития событий, наиболее вероятный сценарий развития событий, сценарий с наименьшим ущербом, сценарий с наибольшим ущербом. При нажатии кнопки "6. Поиск наименее вероятного сценария развития событий" в окне "Ход выполнения" отобразятся все возможные варианты развития событий, наименее вероятный сценарий развития событий, его вероятность и коэффициент ущерба (рис.4.15).
Рисунок 4.15 - Поиск наименее вероятного сценария развития событий При нажатии кнопки "7. Поиск наиболее вероятного сценария развития событий" в окне "Ход выполнения" отобразятся все возможные варианты развития событий (рис.4.15), наиболее вероятный сценарий развития событий, его вероятность и коэффициент ущерба (рис.4.16). Рисунок 4.16 - Поиск наиболее вероятного сценария развития событий Для того, чтобы определить сценарий с наименьшим ущербом, необходимо нажать кнопку "8. Поиск сценария с наименьшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения" (рис.4.17). Рисунок 4.17 - Поиск сценария с наименьшим ущербом Для того, чтобы определить сценарий с наибольшим ущербом, необходимо нажать кнопку "9. Поиск сценария с наибольшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения" (рис.4.18). Рисунок 4.18 - Поиск сценария с наибольшим ущербом Для окончания работы с программой необходимо нажать кнопку "Выход". 5. Техническое обеспечение Программа функционирует на универсальной ПЭВМ. ПЭВМ имеют небольшие габариты, обладают большой мощностью и быстродействием. Для реализации программного обеспечения "МАГ" необходим набор аппаратных средств со следующими минимальными техническими характеристиками: процессор INTEL Pentium IV с тактовой частотой 1,5 ГГц, объем оперативной памяти не менее 128 Мб; жесткий диск объемом 2 Гб; видеоадаптер SVGA; клавиатура; манипулятор мышь; 17" SVGA монитор. Выбор данного комплекса технических средств обусловлен требованиями, предъявляемыми к надежному обеспечению безопасности магистральных газопроводов, а именно: оперативность и качество принимаемых управленческих решений, необходимость наличия обширной информации о возможных ситуациях, возникающих при предаварийной и аварийной работе магистрального газопровода. Кроме того, выбранный комплекс технических средств отвечает требованиям программного обеспечения "МАГ" - требованиям выбранного языка Delphi 7. Заключение В данной выпускной квалификационной работе были рассмотрены принципы обеспечения безопасности магистральных газопроводов. В частности, в ходе выполнения работы выделены основные характеристики и поражающие факторы аварий на объектах нефтегазового профиля. Кроме того, выделены причины возникновения аварий на объектах транспорта газа и причины роста числа таких аварий. Это позволило определить основные направления обеспечения безопасности магистральных газопроводов. В работе были рассмотрены существующие методы анализа риска. В результате было установлено, что для реализации процесса управления безопасностью объектов транспорта газа целесообразно использовать логико-графические методы построения и анализа "дерева отказов" и "дерева событий". Кроме того, проведен анализ риска, включающий следующие стадии: идентификация опасностей - выделены основные присущие системе транспорта газа опасности; анализ частоты аварий - построены "дерево отказов" и "дерево событий", рассчитаны вероятности и частоты реализации возможных сценариев; анализ последствий аварий - оценено воздействие опасных факторов на имущество, людей, окружающую среду. Для управления безопасностью магистральных газопроводов использован ситуационный подход, предполагающий выявление проблемных ситуаций и выполнение различных преобразований имеющейся информации в управленческие решения, приводящие к их разрешению. На основе обработанной информации построен алгоритм поиска возможного пути развития аварийной ситуации на магистральном газопроводе. Выбраны технические средства реализации процесса поиска возможного пути развития аварийной ситуации на магистральном газопроводе. На базе выбранного комплекса технических средств данный алгоритм реализован программно. Корректность работы программы проверена на контрольном примере. Правила пользования разработанным программным средством приведены в инструкции по эксплуатации программы. Разработанная программа позволяет оперативно прослеживать ход развития аварийной ситуации на магистральном газопроводе, определять вероятности достижения системой интересующих оператора состояний. Библиографический список
Приложение А Текст программы управления безопасностью магистральных газопроводов: unit MainUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Spin, ComCtrls; const word_max=100; line_max=255; colon=': '; period='. '; comma=','; spase=''; equals='='; nextrow=#13#10; definite=100; type TMainForm = class (TForm) Memo_Report: TMemo; LE_Crash_Name: TLabeledEdit; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; Bevel4: TBevel; Bevel5: TBevel; Bevel6: TBevel; Bevel7: TBevel; Label1: TLabel; Label2: TLabel; Bevel9: TBevel; B_AddFact: TButton; LE_AddFact_Frime: TLabeledEdit; LE_AddFact_Value: TLabeledEdit; LE_AddFact_Cf: TLabeledEdit; B_TestFact: TButton; LE_TestFact_Frime: TLabeledEdit; LE_TestFact_Value: TLabeledEdit; B_SeeFacts: TButton; B_MakeFrimeMultivalid: TButton; LE_MakeMulti_Frime: TLabeledEdit; B_MakeLegal: TButton; LE_MakeLegal_Frime: TLabeledEdit; B_AddQuestion: TButton; LE_AddQuestion_Frime: TLabeledEdit; B_Answer: TButton; LE_Answer_Frime: TLabeledEdit; B_GetQuestion: TButton; SE_Answer: TSpinEdit; LE_Answer_Value: TLabeledEdit; B_Answer_GetNumVals: TButton; M_MakeLegal_Value: TMemo; LE_AddQuestion_Value: TLabeledEdit; LE_GetQuestion: TLabeledEdit; B_GetTarget: TButton; LE_GetTarget: TLabeledEdit; Button1: TButton; Bevel8: TBevel; Button2: TButton; Label3: TLabel; procedure FormCreate (Sender: TObject); procedure B_AddFactClick (Sender: TObject); procedure B_TestFactClick (Sender: TObject); procedure B_SeeFactsClick (Sender: TObject); procedure B_MakeFrimeMultivalidClick (Sender: TObject); procedure B_MakeLegalClick (Sender: TObject); procedure B_AddQuestionClick (Sender: TObject); procedure B_AnswerClick (Sender: TObject); procedure B_GetQuestionClick (Sender: TObject); procedure B_Answer_GetNumValsClick (Sender: TObject); procedure LE_OnExit (Sender: TObject); procedure M_MakeLegal_ValueExit (Sender: TObject); procedure B_GetTargetClick (Sender: TObject); procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); private { Private declarations } public { Public declarations } end; word_string=string [word_max] ; line_string=string [line_max] ; value_ptr=^value; legal_ptr=^legal_value; frime_ptr=^frime; value=record // значение name: word_string; // Имя cert: integer; // коэффициент доверия next: value_ptr; // указатель на след. значение end; legal_value=record // Допустимое значение name: word_string; // Имя next: legal_ptr; // Указатель на следующее допуст. значение end; frime=record // Фрейм name: word_string; // имя question: line_string; // атрибут ("вопрос") question: line_string; // атрибут ("вопрос") multivald: boolean; // флаг многозначности legal_list: legal_ptr; // указатель на 1ый элемент списка допустимых значений sought: boolean; // флаг "найденности" value_list: value_ptr; // указатель на 1ый элемент списка значений ("ответ (ы)") next: frime_ptr // указатель на следующий фрейм end; prem_ptr=^prem; con_ptr=^con; rule_ptr=^rule; prem=record // Предпосылка frime: word_string; // имя фрейма value: word_string; // имя значение next: prem_ptr; // указатель на следующую end; con=record // заключение frime: word_string; // имя фрейма value: word_string; // имя значения cert: integer; // коэффициент доверия next: con_ptr; // указатель на следующее end; rule=record // правило name: word_string; // имя prem: prem_ptr; // указатель на предпосылку con: con_ptr; // указатель на заключение next: rule_ptr; // указатель на следующее end; var MainForm: TMainForm; last_try, // результат последнего поиска top_fact: frime_ptr; // указатель на начало списка фреймов-объктов top_rule: rule_ptr; // указатель на начало списка правил rulesFile: TextFile; explain: boolean; procedure make_node (var curr_frime: frime_ptr); function find_frime (f_frime: word_string): frime_ptr; procedure split (f_line: line_string; var f_frime,f_value: word_string); function test (f_frime,f_value: word_string): value_ptr; procedure add_frime (f_frime,f_value: word_string); procedure see_vals (curr_frime: frime_ptr; cf_on: boolean); procedure see_frimes (cf_on: boolean); function get_cf (f_line: line_string): integer; function blend (cf1,cf2: integer): integer; procedure add_cf (f_frime,f_value: word_string; cf2: integer); function ok_add (f_frime: word_string; cf: integer): boolean; procedure make_multi (f_frime: word_string); function find_word (f_line: line_string; n: integer; var _word: word_string): boolean; procedure add_legal (f_legal: word_string; curr_frime: frime_ptr); function find_legal (f_frime: word_string; n: integer; var _word: word_string): boolean; procedure make_legals (m_line: word_string); procedure make_legals_from_form (f_frime: word_string); procedure add_question (f_frime,s_value: word_string); function p_question (f_frime: word_string): line_string; procedure ask (f_frime: word_string; var f_value: word_string); procedure p_read (var oline: line_string); function add_prem (curr_prem: prem_ptr; f_line: line_string): prem_ptr; function add_con (curr_con: con_ptr; f_line: line_string): con_ptr; procedure p_rule (curr_rule: rule_ptr); procedure enter_rule (rule_name: word_string); procedure LoadFormFile; procedure SaveToFile; function find_rule (fri: word_string; curr_rule: rule_ptr): rule_ptr; procedure pursue (f_frime: word_string); procedure q_result (f_frime: word_string); procedure explain_how (curr_rule: rule_ptr); procedure explain_why (f_frime: word_string); implementation {$R *. dfm} procedure make_node; var head: frime_ptr; begin new (curr_frime); head: =top_fact; top_fact: =curr_frime; with curr_frime^ do begin next: =head; value_list: =nil; question: =''; legal_list: =nil; multivald: =false; sought: =false; end; end; function find_frime; var curr_frime: frime_ptr; begin if (last_try<>nil) and (last_try^. name=f_frime) then begin Result: =last_try; exit; end else begin curr_frime: =top_fact; last_try: =nil; Result: =nil; while (curr_frime<>nil) and (Result=nil) do begin if (curr_frime^. name=f_frime) then begin Result: =curr_frime; Last_try: =curr_frime; exit; end; curr_frime: =curr_frime^. next; end; end; end; procedure split; var st_left, st_right: integer; begin st_right: =pos (period,f_line); if st_right=length (f_line) then f_line: =copy (f_line,1,st_right-1); st_left: =pos (equals,f_line); st_right: =pos (comma,f_line); if ( (st_left=0) and (st_right=0)) then f_frime: =f_line; if (st_right=0) then st_right: =length (f_line) +1; if st_left>0 then begin f_frime: =copy (f_line,1,st_left-1); if pos (') ',f_frime) =0 then f_value: =copy (f_line,st_left+1,st_right-st_left-1); end; st_right: =pos (') ',f_frime); Приложение А (продолжение) if st_right>0 then f_frime: =copy (f_line,1,st_right-1); end; function test (f_frime,f_value: word_string): value_ptr; var curr_frime: frime_ptr; curr_value: value_ptr; begin curr_frime: =find_frime (f_frime); Result: =nil; if curr_frime<>nil then begin curr_value: =curr_frime^. value_list; while (curr_value<>nil) do begin if curr_value^. name= f_value then Result: =curr_value; curr_value: =curr_value^. next; end; end; end; procedure add_frime (f_frime,f_value: word_string); var curr_frime: frime_ptr; value_list,head: value_ptr; begin curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; curr_frime^. sought: = true; value_list: =test (f_frime, f_value); if value_list=nil then begin head: =curr_frime^. value_list; new (value_list); with value_list^ do begin next: =head; cert: =0; name: =f_value; end; curr_frime^. value_list: =value_list; end; end; procedure see_vals; var curr_value: value_ptr; cf: integer; bufStr: string; begin curr_value: =curr_frime^. value_list; bufStr: =curr_frime^. name+equals; if curr_value=nil then bufStr: =bufStr+' He определено'; while (curr_value<>nil) do begin bufStr: =bufStr+curr_value^. name; if (cf_on=true) then begin cf: =curr_value^. cert; bufStr: =BufStr+' (Кд='+IntToStr (cf) +') '; end; curr_value: =curr_value^. next; if curr_value<>nil then bufStr: =BufStr+','+NextRow; end; MainForm. Memo_Report. Lines. Add (BufStr); end; procedure see_frimes (cf_on: boolean); var curr_frime: frime_ptr; begin MainForm. Memo_Report. Lines. Add (''); MainForm. Memo_Report. Lines. Add ('Просмотр фактов базы знаний: '); curr_frime: =top_fact; while (curr_frime<>nil) do begin see_vals (curr_frime,cf_on); curr_frime: =curr_frime^. next; MainForm. Memo_Report. Lines. Add (''); end; end; function get_cf; var resultat, st_right: integer; trim: line_string; begin Result: =definite; st_right: =pos (period,f_line); if st_right=length (f_line) then f_line: =copy (f_line, 1,st_right-1); st_right: =pos ('Кд',f_line); if (st_right>0) and (st_right+3<line_max) then begin trim: =copy (f_line,st_right+3,length (f_line) - st_right-2); val (trim,Result,resultat); if result>0 then Result: =definite; if pos ('Плохой',trim) >0 then Result: =25; if pos ('Средний',trim) >0 then Result: =50; if pos ('Хороший',trim) >0 then Result: =75; if pos ('Абсолютный',trim) >0 then Result: =definite; end; end; function blend; begin blend: = (100* (cf1+cf2) - (cf1*cf2)) div 100; end; procedure add_cf (f_frime,f_value: word_string; cf2: integer); var cf1: integer; curr_value: value_ptr; begin curr_value: =test (f_frime,f_value); cf1: =curr_value^. cert; curr_value^. cert: =blend (cf1,cf2); end; function ok_add; var curr_frime: frime_ptr; curr_value: value_ptr; is_100: boolean; begin is_100: =false; curr_frime: =find_frime (f_frime); if curr_frime<>nil then begin curr_value: =curr_frime^. value_list; while (curr_value<>nil) do begin if curr_value^. cert=definite then begin is_100: =true; break; end; curr_value: =curr_value^. next; end; end; Result: =not ( (cf=definite) and (is_100) and (not (curr_frime^. multivald))); end; procedure make_multi; var curr_frime: frime_ptr; begin curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; curr_frime^. multivald: =true; end; function find_word; var x, com_place: integer; begin Result: =false; _word: =''; for x: =1 to n do begin com_place: =pos (comma,f_line); if com_place=0 then begin com_place: =length (f_line) +1; Result: =true; end; _word: =copy (f_line,1,com_place-1); f_line: =copy (f_line,com_place+1,length (f_line) - com_place); end; end; procedure add_legal; var curr_legal,head: legal_ptr; begin new (curr_legal); curr_legal^. next: =nil; curr_legal^. name: =f_legal; head: =curr_frime^. legal_list; if head<>nil then begin while (head^. next<>nil) do head^. next: =curr_legal; end else curr_frime^. legal_list: =curr_legal; end; function find_legal; var curr_frime: frime_ptr; curr_legal: legal_ptr; counter: integer; begin curr_frime: =find_frime (f_frime); Result: =true; if curr_frime<>nil then begin curr_legal: =curr_frime^. legal_list; _word: =curr_legal^. name; counter: =1; if curr_legal=nil then Result: =false; while (curr_legal<>nil) and (counter<n) do begin curr_legal: =curr_legal^. next; if curr_legal<>nil then begin _word: =curr_legal^. name; inc (counter); end else Result: =False; end; end else Result: =False; end; procedure make_legals; var curr_frime: frime_ptr; counter, st_place: integer; new_line: line_string; _word, f_frime, dummy: word_string; done: boolean; begin split (m_line,f_frime,dummy); curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; st_place: =pos (equals,f_frime); new_line: =copy (f_frime,st_place+1,length (f_frime) - st_place); counter: =1; done: =false; while not done do begin done: =find_word (new_line,counter,_word); add_legal (_word,curr_frime); counter: =counter+1; end; end; procedure make_legals_from_form; var curr_frime: frime_ptr; i: integer; begin curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; with MainForm. M_MakeLegal_Value do If Lines. Count>0 then for i: =0 to Lines. Count-1 do add_legal (Lines [i],curr_frime); end; procedure add_question; var curr_frime: frime_ptr; begin curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; curr_frime^. question: =s_value; end; function p_question; var curr_frime: frime_ptr; begin curr_frime: =find_frime (f_frime); if curr_frime<>nil then begin if curr_frime^. question<>'' then Result: =curr_frime^. question else Result: ='Вопрос объекта пуст'; еnd else Result: ='Объект в базе не найден'; end; procedure ask; var pick, num_vals: integer; _word: word_string; begin if not find_legal (f_frime,1,_word) then begin MainForm. Memo_Report. Lines. Add ('Введите значение и нажмите кнопку "Выбрать"'); MainForm. B_Answer_GetNumVals. Enabled: =True; while MainForm. B_Answer_GetNumVals. Tag=0 do Application. ProcessMessages; MainForm. B_Answer_GetNumVals. Tag: =0; f_value: =MainForm. LE_Answer_Value. Text; // readln (f_value) end else begin num_vals: =1; with MainForm. Memo_Report. Lines do begin Add ('Допустимые значения объекта "'+f_frime+'": '); while find_legal (f_frime,num_vals,_word) do begin Add (IntToStr (num_vals) +'. '+_word); inc (num_vals); end; end; MainForm. SE_Answer. MaxValue: =num_vals-1; MainForm. Memo_Report. Lines. Add ('Выберите номер ответа и нажмите кнопку "Выбрать"'); MainForm. B_Answer_GetNumVals. Enabled: =True; while MainForm. B_Answer_GetNumVals. Tag=0 do Application. ProcessMessages; pick: =MainForm. SE_Answer. Value; // ord (select [1]) - 48; MainForm. B_Answer_GetNumVals. Tag: =0; find_legal (f_frime,pick,_word); f_value: =_word; end; end; procedure p_read; var c: char; len, counter, st_place: integer; supress: boolean; in_line: line_string; begin readln (RulesFile, in_line); in_line: =AnsiLowerCase (in_line); oline: =''; len: =length (in_line); st_place: =pos (' (', in_line); if st_place>0 then len: =st_place; supress: =false; for counter: =1 to len do begin c: =in_line [counter] ; if (c=equals) and (pos ('вопрос',oline) >0) then supress: =true; if ord (c) =9 then c: =' '; if (c<>'') or (supress=true) then oline: =concat (oline,c); end; end; function add_prem; var new_prem: prem_ptr; f_frime,f_value: word_string; begin split (f_line,f_frime,f_value); add_prem: =curr_prem; new (new_prem); with new_prem^ do begin frime: =f_frime; value: =f_value; next: =nil; end; if curr_prem=nil then add_prem: =new_prem else begin while (curr_prem^. next<>nil) do curr_prem: =curr_prem^. next; curr_prem^. next: =new_prem; end; end; function add_con (curr_con: con_ptr; f_line: line_string): con_ptr; var new_con: con_ptr; f_frime, f_value: word_string; begin split (f_line,f_frime,f_value); add_con: =curr_con; new (new_con); with new_con^ do begin frime: =f_frime; value: =f_value; cert: =get_cf (f_line); next: =nil; end; if curr_con=nil then add_con: =new_con else begin while (curr_con^. next<>nil) do curr_con^. next: =new_con; end; end; procedure p_rule (curr_rule: rule_ptr); var curr_prem: prem_ptr; curr_con: con_ptr; bufStr: string; begin bufStr: =curr_rule^. name+' '; curr_prem: =curr_rule^. prem; while (curr_prem<>nil) do begin bufStr: =bufStr+curr_prem^. frime+'='; bufStr: =bufStr+curr_prem^. value; curr_prem: =curr_prem^. next; if curr_prem<>nil then bufStr: =bufStr+' ' else MainForm. Memo_Report. Lines. Add (BufStr); end; curr_con: =curr_rule^. con; while curr_con<>nil do begin bufStr: =curr_con^. frime+'='; bufStr: =bufStr+curr_con^. value+', Кд='+IntToStr (curr_con. cert); curr_con: =curr_con^. next; if curr_con<>nil then bufStr: =bufStr+' ' else MainForm. Memo_Report. Lines. Add (BufStr); end; end; procedure enter_rule (rule_name: word_string); var new_rule, curr_rule: rule_ptr; line: line_string; done: boolean; begin new (new_rule); if top_rule<>nil then begin curr_rule: =top_rule; while curr_rule^. next<>nil do curr_rule: =curr_rule^. next; curr_rule^. next: =new_rule; end else top_rule: =new_rule; with new_rule^ do begin name: =rule_name; next: =nil; prem: =nil; con: =nil; end; p_read (line); done: =false; while ( (not done) and (not Eof (RulesFile))) do begin new_rule^. prem: =add_prem (new_rule^. prem,line); p_read (line); done: = (pos ('ВВ',line) >0) and (length (line) =2); end; p_read (line); repeat done: =Eof (RulesFile); new_rule^. con: =add_con (new_rule^. con,line); done: =done or (line [length (line)] ='. '); if not done then p_read (line); until done; p_rule (new_rule); end; procedure LoadFormFile; var command: word_string; m_line,f_line: line_string; st_place: integer; s_frime,s_value: word_string; begin MainForm. Memo_Report. Lines. Add ('Чтение файла, содержащего правила'); assign (RulesFile,'rules. txt'); reset (RulesFile); top_rule: =nil; command: =''; while not Eof (RulesFile) do begin p_read (f_line); st_place: =pos (' (',f_line); if st_place=0 then st_place: =pos (colon,f_line); if st_place>1 then begin command: =copy (f_line,1,st_place-1); m_line: =copy (f_line,st_place+1,length (f_line) - st_place); if command='многозначный' then begin split (m_line,s_frime,s_value); make_multi (s_frime); add_frime (s_frime,s_value); add_cf (s_frime,s_value,get_cf (m_line)); end else if command='вопрос' then begin split (m_line,s_frime,s_value); add_question (s_frime,s_value); end else if command='разрешён' then begin make_legals (m_line); end else if command='правило' then begin split (m_line,s_frime,s_value); enter_rule (s_frime); end; end; end; end; procedure SaveToFile; var a_frime: frime_ptr; a_legal: legal_ptr; a_value: value_ptr; a_rule: rule_ptr; a_con: con_ptr; a_prem: prem_ptr; f: TextFile; begin AssignFile (f,'rules. txt'); Rewrite (f); a_frime: =top_fact; while a_frime<>nil do begin a_value: =a_frime^. value_list; while a_value<>nil do begin writeln (f,'многозначный'+colon+a_frime^. name+equals+a_value^. name+comma+'Кд=',a_value^. cert); a_value: =a_value. next; end; a_Legal: =a_frime^. Legal_list; write (f,'разрешён'+colon,a_frime^. name,equals); while a_Legal<>nil do begin write (f,a_legal^. name,comma); a_legal: =a_legal. next; end; writeln (f); writeln (f,'вопрос'+colon+a_frime^. name+equals+a_frime^. question); a_frime: =a_frime^. next; end; a_rule: =top_rule; while a_rule<>nil do begin writeln (f,'правило'+a_rule^. name); a_prem: =a_rule^. prem; while a_prem<>nil do begin writeln (f,a_prem^. frime+equals+a_prem^. value); a_prem: =a_prem^. next; end; writeln (f,'ВВ'); a_con: =a_rule^. con; while a_con<>nil do begin writeln (f,a_con^. frime+equals+a_con^. value+comma+'Кд=',a_con^. cert); a_con: =a_con^. next; if a_prem=nil then writeln (f,'. '); end; a_rule: =a_rule^. next; end; CloseFile (f); end; function find_rule (fri: word_string; curr_rule: rule_ptr): rule_ptr; var found: boolean; curr_con: con_ptr; begin found: =false; find_rule: =nil; while (curr_rule<>nil) and (not found) do begin curr_con: =curr_rule^. con; while curr_con<>nil do begin if curr_con^. frime=fri then begin found: =true; find_rule: =curr_rule; end; curr_con: =curr_con^. next; end; curr_rule: =curr_rule^. next; end; end; procedure conclude (curr_rule: rule_ptr; prem_cert: integer); var curr_con: con_ptr; cert: integer; begin curr_con: =curr_rule^. con; while curr_con<>nil do begin add_frime (curr_con^. frime,curr_con^. value); cert: = (prem_cert*curr_con^. cert) div 100; add_cf (curr_con^. frime,curr_con^. value,cert); curr_con: =curr_con^. next; end; end; procedure pursue; var f_value: word_string; curr_frime: frime_ptr; curr_value: value_ptr; curr_rule: rule_ptr; curr_prem: prem_ptr; bad: boolean; solved: boolean; lowest: integer; begin curr_frime: =find_frime (f_frime); if curr_frime=nil then begin make_node (curr_frime); curr_frime^. name: =f_frime; end; solved: =false; if not curr_frime^. sought then begin solved: =false; curr_frime^. sought: =true; curr_rule: =find_rule (f_frime,top_rule); while (curr_rule<>nil) and (ok_add (f_frime,definite)) do begin curr_prem: =curr_rule^. prem; bad: =false; lowest: =definite; while (curr_prem<>nil) and (not bad) do begin pursue (curr_prem^. frime); curr_value: =test (curr_prem^. frime,curr_prem^. value); if curr_value=nil then bad: =true else if curr_value^. cert<lowest then lowest: =curr_value^. cert; curr_prem: =curr_prem^. next; end; if not bad then begin if explain then conclude (curr_rule,lowest); solved: =true; end; curr_rule: =find_rule (f_frime,curr_rule^. next); end; if not solved then begin if explain then ask (f_frime,f_value); add_frime (f_frime,f_value); add_cf (f_frime,f_value,definite); end; end; end; procedure q_result (f_frime: word_string); var curr_frime: frime_ptr; begin MainForm. Memo_Report. Lines. Add ('Результат консультации: '); curr_frime: =find_frime (f_frime); see_vals (curr_frime,true); MainForm. Memo_Report. Lines. Add ('Конец консультации'); end; procedure explain_how (curr_rule: rule_ptr); var curr_prem: prem_ptr; curr_con: con_ptr; begin MainForm. Memo_Report. Lines. Add (''); MainForm. Memo_Report. Lines. Add ('Tак как: '); curr_prem: =curr_rule^. prem; while curr_prem<>nil do begin MainForm. Memo_Report. Lines. Add (curr_prem^. frime+'='+curr_prem^. value); curr_prem: =curr_prem^. next; if curr_prem<>nil then MainForm. Memo_Report. Lines. Add (' ') else MainForm. Memo_Report. Lines. Add (''); end; MainForm. Memo_Report. Lines. Add ('Можно сделать вывод, что '); curr_con: =curr_rule^. con; while curr_con<>nil do begin MainForm. Memo_Report. Lines. Add (curr_con^. frime+'='+curr_con^. value+', Кд='+IntToStr (curr_con^. cert)); curr_con: =curr_con^. next; if curr_con<>nil then MainForm. Memo_Report. Lines. Add (' ') else MainForm. Memo_Report. Lines. Add (''); end; end; procedure explain_why (f_frime: word_string); begin MainForm. Memo_Report. Lines. Add ('') end; procedure TMainForm. FormCreate (Sender: TObject); begin last_try: =nil; top_fact: =nil; LoadFormFile; explain: =true; end; procedure TMainForm. B_AddFactClick (Sender: TObject); var s_frime, s_value: word_string; s_cf: integer; begin s_cf: =StrToInt (LE_AddFact_Cf. Text); s_frime: =LE_AddFact_Frime. Text; s_value: =LE_AddFact_Value. Text; if ok_add (s_frime,s_cf) then begin add_frime (s_frime,s_value); add_cf (s_frime,s_value,s_cf); MainForm. Memo_Report. Lines. Add ('Факт добавлен'); end else MainForm. Memo_Report. Lines. Add ('Добавление не разрешено (Объект '+s_frime+' нe объявлен многозначным) ! '); end; procedure TMainForm. B_TestFactClick (Sender: TObject); var s_frime, s_value: word_string; begin s_frime: =LE_TestFact_Frime. Text; s_value: =LE_TestFact_Value. Text; if test (s_frime,s_value) =nil then MainForm. Memo_Report. Lines. Add ('Факт неверен') else MainForm. Memo_Report. Lines. Add ('Факт верен'); end; procedure TMainForm. B_SeeFactsClick (Sender: TObject); begin see_frimes (true); end; procedure TMainForm. B_MakeFrimeMultivalidClick (Sender: TObject); begin make_multi (LE_MakeMulti_Frime. Text); end; procedure TMainForm. B_MakeLegalClick (Sender: TObject); begin make_legals_from_form (LE_MakeLegal_Frime. Text); end; procedure TMainForm. B_AddQuestionClick (Sender: TObject); var s_frime, s_value: word_string; begin s_frime: =LE_AddQuestion_Frime. Text; s_value: =LE_AddQuestion_Value. Text; add_question (s_frime,s_value); end; procedure TMainForm. B_GetQuestionClick (Sender: TObject); var s_frime: word_string; begin s_frime: =LE_Answer_Frime. Text; LE_GetQuestion. Text: =p_question (s_frime); end; procedure TMainForm. B_Answer_GetNumValsClick (Sender: TObject); begin B_Answer_GetNumVals. Tag: =1; end; procedure TMainForm. B_AnswerClick (Sender: TObject); var s_frime, s_value: word_string; begin s_frime: =LE_Answer_Frime. Text; ask (s_frime,s_value); add_frime (s_frime,s_value); add_cf (s_frime,s_value,definite); end; procedure TMainForm. LE_OnExit (Sender: TObject); begin TLabeledEdit (Sender). Text: =AnsiLowerCase (trim (TLabeledEdit (Sender). Text)); end; procedure TMainForm. M_MakeLegal_ValueExit (Sender: TObject); var i: integer; begin with M_MakeLegal_Value do If Lines. Count>0 then for i: =Lines. Count-1 downto 0 do begin Lines [i]: =AnsiLowerCase (trim (Lines [i])); If Lines [i] ='' then Lines. Delete (i); end; end; procedure TMainForm. B_GetTargetClick (Sender: TObject); var s_frime: word_string; begin s_frime: =LE_GetTarget. Text; if s_frime<>'' then begin pursue (s_frime); q_result (s_frime); end else MainForm. Memo_Report. Lines. Add ('Ошибка! Объект не указан! '); end; procedure TMainForm. Button1Click (Sender: TObject); begin SaveToFile; end; procedure TMainForm. Button2Click (Sender: TObject); begin qmport; end; end.
2. Сочинение на тему Какой Россия станет через двадцать лет 3. Реферат Ангола после независимости 2 4. Реферат Адвокат и его речь 5. Реферат на тему Ich Wohne Mit Meinem Vater Meiner Mutter 6. Кодекс и Законы Преступление как особый вид правонарушения 7. Доклад на тему Труверы 8. Реферат Умения, навыки, привычки 9. Реферат Диетотерапия 10. Реферат Налогообложение иностранных организаций в России |