ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА БАКАЛАВРА
Направление 230100
Информатика и вычислительная техника
Разработка алгоритмического и программного обеспечения ситуационного управления безопасностью магистральных газопроводов
Содержание
1. Аварийные ситуации на магистральных газопроводах
1.1 Классификация чрезвычайных ситуаций
1.2 Аварии и их характеристики
1.3 Причины возникновения аварий на магистральных газопроводах
1.4 Причины роста числа аварий на объектах нефтегазового профиля
2.1 Существующие методы анализа риска
2.2 Оценка риска: анализ частоты аварий
2.4 Оценка риска: анализ возможных последствий аварий
3. Ситуационный подход к управлению безопасностью потенциально опасных производственных объектов
3.1 Принципы ситуационного управления
3.2 Функции и структура системы ситуационного управления
3.3 Схема программы управления безопасностью магистральных газопроводов
4. Программное обеспечение ситуационного управления безопасностью магистральных газопроводов
4.1 Описание программы управления безопасностью магистральных газопроводов
4.2 Руководство по эксплуатации
Введение
Деятельность человека в любой сфере всегда связана с риском. Он может быть меньшим или большим, но избежать его невозможно. Одним из основных мотивов жизнедеятельности человека является безопасность, которая в условиях неопределенности, охватывающей все стороны жизни человека, неизбежно связана с риском. Риск - это сочетание частоты (вероятности) и последствий определенного опасного события.
Риск - явление, которое имеет множество не совпадающих, иногда противоречивых реальных оснований.
Ситуация риска среди множества видов ситуаций занимает особое место, так как функционированию и развитию многих техногенных, природных и общественных процессов присущи элементы неопределенности, что обусловливает появление ситуаций, которые не имеют однозначного исхода. Следовательно, если существует возможность качественно или количественно определить вероятность альтернативных вариантов, это и будет ситуация риска.
Таким образом, рискованная ситуация связана с процессами, которым сопутствуют: наличие неопределенности, необходимость выбора альтернативы, возможность оценить вероятность выбираемых альтернатив.
Ситуация риска качественно отличается от ситуации неопределенности. В ситуациях неопределенности вероятность наступления результатов исходов в принципе не устанавливаема. Рискованная ситуация представляет собой разновидность неопределенной, которую характеризуют события, наступление которых вероятно и может быть определено.
Оценка опасностей различного происхождения и разработка на этой основе оптимальных мероприятий представляют одну из ключевых проблем управления безопасностью.
Никаких опасностей вне зависимости от нас и нашей деятельности в природе и технических системах как таковых не существует. Опасными или безопасными являются сами наши системы деятельности, и зависит это не от свойств объектов, систем или природных процессов, с которыми нам приходится иметь дело, а от наличия или отсутствия соответствующей системы знаний, форм организаций, методов и средств работы с конкретной технической системой и протекающими в ней процессами в конкретных условиях.
Действующие магистральные и внутрипромысловые нефтегазопродуктопроводы представляют собой сложные технические системы, обладающие мощным энергетическим потенциалом и охватывающие 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 | Ошибки при проведении тех. диагностики | 0,0000004 |
2 | Наклеп | 0,000002 |
3 | Пластическая деформация | 0,0000014 |
4 | Риски | 0,0000001 |
5 | Задиры | 0,0000002 |
6 | Вмятины | 0,0000014 |
7 | Царапины | 0,000079 |
8 | Плены | 0,000002 |
9 | Расслоения | 0,000003 |
10 | Ликвация | 0,0000001 |
11 | Полосчатость | 0,00000001 |
12 | Неметаллические включения | 0,00000001 |
13 | Натеки | 0,000001 |
14 | Кратеры | 0,000001 |
15 | Подрезы | 0,000001 |
16 | Протеки | 0,000002 |
17 | Трещины | 0,000002 |
18 | Прожоги | 0,0000024 |
19 | Поры | 0,000002 |
20 | Непровары корня шва | 0,000003 |
21 | Неметаллические включения | 0,000005 |
22 | Прочность | 0,000001 |
23 | Вязкость | 0,00000001 |
24 | Полосчатость | 0,0000001 |
25 | Сопротивление зарождению трещин | 0,000004 |
26 | Свариваемость | 0,0000002 |
27 | Способность к пластич. деформации | 0,0000001 |
28 | Механические разрушения | 0,000001 |
29 | Коррозия | 0,000001 |
30 | Действие блуждающих токов | 0,0000001 |
31 | Механические воздействия | 0,000002 |
32 | Воздействия окружающей среды | 0,000003 |
33 | Внутреннее давление | 0,000012 |
34 | Давление грунта | 0,000002 |
35 | Температурные воздействия | 0,000001 |
36 | Упругий изгиб | 0,000004 |
37 | Блуждающие токи | 0,000002 |
На рисунке 2.4 представлено дерево событий для ситуации "выброс газа".
Рисунок 2.4 - Дерево событий для ситуации "выброс газа"
Конструирование дерева событий происходит аналогично конструированию дерева неполадок. Оно начинается с определения инициирующего события. Каждая ветвь дерева событий представляет собой отдельный результат последовательности событий.
Частота каждого сценария развития аварийной ситуации рассчитывается путем умножения частоты основного события на вероятность последующего. При этом сумма вероятностей событий, следующих из каждой точки разветвления дерева событий, равна единице (что, по существу, означает полноту описания возможных сценариев развития аварийной ситуации).
Оценку вероятности событий проводят с использованием статистических данных или расчетными методами. При отсутствии статистических данных для вероятности мгновенного воспламенения истекающего продукта допускается принимать значение 0,05. Статистические вероятности различных сценариев развития аварий с выбросом горючего вещества приведены в таблице 2.3
Таблица 2.3 - Статистические вероятности сценариев развития аварий
Сценарий аварии | Вероятность |
Факел | 0,0574 |
Огненный шар | 0,7039 |
Горение пролива | 0,0287 |
Сгорание облака | 0,1689 |
Взрыв облака | 0,1190 |
Без горения | 0,0292 |
Также по статистике степень аварийности трубопроводного транспорта . В 90% случаев происходит выброс содержимого через отверстие 1 дм в стенке трубопровода до тех пор, пока утечка не будет остановлена, в 10% случаев - полный разрыв трубопровода [8].
2.4 Оценка риска: анализ возможных последствий аварий
Анализ последствий включает оценку воздействий опасных факторов на людей, имущество или окружающую среду.
Так как авария на опасных промышленных объектах может быть отнесена к случайным явлениям, то мера опасности может быть оценена при анализе случайных величин ущербов от аварии. Так, при рассмотрении события "отказ технического устройства" в теории надежности оперируют в основном дискретной характеристической случайной величиной X, которая равна 1, если за определенное время отказ происходит, и равна 0, если не происходит. События, связанные с крупными нежелательными последствиями в сложных системах, анализируют, рассматривая случайную величину потерь (ущербов) от аварии при эксплуатации опасных промышленных объектов - Y0. Количественные показатели риска аварии (индивидуальный, коллективный и социальный риски, ожидаемый ущерб) представляют собой характеристики случайной величины аварийных потерь Y. Определение "потенциальный территориальный риск" характеризует случайное событие - возникновение в определенной точке территории факторов аварии, достаточных для смертельного поражения человека. Этот риск определяется дискретной характеристической величиной D, равной 1, если за определенное время такое событие происходит, или равной 0, если не происходит.
Потери Y разделяют на материальные G (непрерывная случайная величина) и людские N (дискретная случайная величина).
В практике анализа риска аварии чаще оперируют не с вероятностями, а со средними интенсивностями (частотами) нежелательных событий за определенное время. Если рассматривать происходящие аварии как стационарный пуассоновский поток событий, то связь между вероятностью события А за время t и его интенсивностью такова:
.
Рассмотрим дискретную случайную величину людских потерь N при аварии на магистральном газопроводе с возможными значениями . Каждое из этих значений N может принять с некоторой вероятностью . Описание дискретной случайной величины N считается полным с точки зрения теории вероятностей, если установлен закон распределения случайной величины, который представляется в виде ряда распределения.
Таблица 2.4 - Ряд распределения дискретной случайной величины N
0 | … | … | |||||
… | … |
Причем
,
- вероятность безаварийной эксплуатации опасного промышленного объекта.
Чтобы придать ряду распределения более наглядный вид прибегают к его графическому изображению - строят многоугольник распределения.
Для непрерывной случайной величины ряд распределения построить нельзя, поэтому воспользуемся другой характеристикой случайной величины потерь:
.
Ее называют F/N-кривой (диаграммой) или F/G-кривой. Это классическая функция распределения потерь, построенная в координатах , так как .
Вероятность попадания случайной величины на заданный участок
: .
В частном случае, значение функции F/N при n=1 чел. Равно вероятности несчастного случая со смертельным исходом, связанного с аварией на магистральном газопроводе.
Одна из основных целей оценки риска аварии - получение достоверных количественных показателей, пригодных для эффективного управления процессом обеспечения промышленной безопасности на опасных промышленных объектах. Оперирование неоднозначными исходными данными дает такие же неоднозначные практические рекомендации и результаты управления.
Для более удобного построения F/N-кривых выражение представим в развернутом виде:
Для непрерывной случайной величины материальных потерь при аварии G может быть определена функция плотности распределения:
.
Математическое ожидание дискретной случайной величины N (коллективный риск) определяется:
.
Если ввести в рассмотрение случайную величину числа рискующих попасть в аварию U, то общее выражение для среднего по группе рискующих индивидуального риска :
,
где - корреляционный момент случайных величин N и 1/U. В частном случае при U=const
,
где u - общее число рискующих людей.
Математическое ожидание непрерывной случайной величины G (ожидаемый ущерб) определяется:
.
В терминах теории вероятностей основные показатели, используемые при анализе риска аварии на опасном промышленном объекте представлены в таблице 2.5.
Таблица 2.5
Показатель риска аварии | Случайная величина | Тип | Показатель риска в терминах теории вероятностей | Формула, описание |
1 | 2 | 3 | 4 | 5 |
Технический риск |
Есть-нет отказ X |
Дискретная характери-стическая | Вероятность отказа с определенными последствиями, который произойдет за некоторый отрезок времени |
- вероятность того, что X=1 |
Потенциальный территориальный риск | Есть-нет факторы смертельного поражения D | То же | Вероятность возникновения за определенное время в некоторой точке пространства факторов смер-тельного поражения |
- вероятность того, что D=1 |
Социальный риск (F/N-кривая) |
Людские потери при аварии N | Дискретная | Интегральная функция распределения людских потерь | |
Полное описание сценариев аварии с гибелью людей | То же | То же | Ряд распределения N (графически - многоугольник распределения) | См. табл.2.4 |
Коллективный риск () |
- | - | Математическое ожидание N | |
Таблица 2.5 (окончание) | ||||
1 | 2 | 3 | 4 | 5 |
Индивидуальный риск () |
Людские потери при аварии N и число рискующих U | Дискретные | Математическое ожидание N и U | |
Риск материальных потерь (F/G-кривая) | Материальные потери при аварии G | Непрерывная | Интегральная функция распределения материальных потерь | |
Полное описание сценариев аварии с материальными потерями | То же | То же | Плотность вероятности G (графически - кривая распределения) | |
Ожидаемый ущерб () |
- | - | Математическое ожидание G | |
Наиболее вероятный ущерб | - | - | Мода G |
при |
Полный ожидаемый вред (ущерб) от аварии |
Людские и материальные потери при аварии N, G | Смешанная | Сумма математических ожиданий N и G |
где H - стоимостная оценка человеческой жизни |
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.
Заключение
В данной выпускной квалификационной работе были рассмотрены принципы обеспечения безопасности магистральных газопроводов.
В частности, в ходе выполнения работы выделены основные характеристики и поражающие факторы аварий на объектах нефтегазового профиля. Кроме того, выделены причины возникновения аварий на объектах транспорта газа и причины роста числа таких аварий. Это позволило определить основные направления обеспечения безопасности магистральных газопроводов.
В работе были рассмотрены существующие методы анализа риска. В результате было установлено, что для реализации процесса управления безопасностью объектов транспорта газа целесообразно использовать логико-графические методы построения и анализа "дерева отказов" и "дерева событий".
Кроме того, проведен анализ риска, включающий следующие стадии:
идентификация опасностей - выделены основные присущие системе транспорта газа опасности;
анализ частоты аварий - построены "дерево отказов" и "дерево событий", рассчитаны вероятности и частоты реализации возможных сценариев;
анализ последствий аварий - оценено воздействие опасных факторов на имущество, людей, окружающую среду.
Для управления безопасностью магистральных газопроводов использован ситуационный подход, предполагающий выявление проблемных ситуаций и выполнение различных преобразований имеющейся информации в управленческие решения, приводящие к их разрешению.
На основе обработанной информации построен алгоритм поиска возможного пути развития аварийной ситуации на магистральном газопроводе.
Выбраны технические средства реализации процесса поиска возможного пути развития аварийной ситуации на магистральном газопроводе.
На базе выбранного комплекса технических средств данный алгоритм реализован программно. Корректность работы программы проверена на контрольном примере.
Правила пользования разработанным программным средством приведены в инструкции по эксплуатации программы.
Разработанная программа позволяет оперативно прослеживать ход развития аварийной ситуации на магистральном газопроводе, определять вероятности достижения системой интересующих оператора состояний.
Библиографический список
Анализ аварий и несчастных случаев на трубопроводном транспорте России: учеб. пособие для вузов/ Под ред. Б.Е. Прусенко, В.Ф. Мартынюка. - М.: Анализ опасностей, 2003. - 351 с.
Андриянова М.А. Управление риском эксплуатации потенциально опасных объектов. Автореферат диссертации на соискание ученой степени кандидата технических наук. Тулу, ТулГУ, 1999.
Арсеньев Ю.Н., Бушинский В.И., Фатуев В.А. Принципы техногенной безопасности производств и построения систем управления риском. ТулГУ, Тула, 1994. - 111 с.
Бушинский В.И., Охинько В.А., Смолин С.А., Кузьмина Н.В. Исследование влияния управления персоналом на безопасность жизнедеятельности человека. Монография. Воронеж, 1999. - 310 с.
Гражданкин А.И., Дегтярев Д.В., Лисанов М.В., Печеркин А.С. Основные показатели риска аварии в терминах теории вероятностей // Безопасность труда в промышленности. - 2002. - №7. - с.35-39
Захаров В. Интеллектуальные технологии в современных системах управления // Проблемы теории и практики управления. - 2005. - №4. - с.2-10
Кульечев В.М., Иванов Е.А., Дадонов Ю.А., Мокроусов С.Н. Трубопроводный транспорт природного газа, нефти и нефтепродуктов и его роль в обеспечении развития и стабильности топливно-энергетического комплекса // Безопасность труда в промышленности. - 2002. - №7. - с.4-10
Мартынюк В.Ф., Прусенко Б.Е. Защита окружающей среды в чрезвычайных ситуациях. Москва, 2003.
Мокроусов С.Н. Пути повышения безопасности работы нефтегазового комплекса и систем магистрального трубопроводного транспорта // Безопасность труда в промышленности. - 2005. - №1. - с.18-20
Поспелов Д.А. Ситуационное управление: теория и практика. - М.: Наука, 1986. - 288 с.
Саати Т., Кернс К. Аналитическое планирование. Организация систем. М.: Радио и связь, 1991. - 216 с.
Управление безопасностью магистральных газопроводов / В.А. Фатуев, С.А. Васин, В.И. Бушинский, В.М. Митин, К.А. Морозов; Под ред. д. т. н., проф., академика МАНЭБ В.А. Фатуева; изд.2-е; ТулГУ, М.: Недра, 2000. - 144 с.
Фатуев В.А., Митин В.М., Морозов К.А., Югфельд А.С. Теоретические основы построения систем управления риском опасных производств. - Учебное пособие. Тула, Тульский государственный университет, 2000. - 179 с.
Фатуев В.А., Морозов К.А., Югфельд А.С., Шадрин А.А. Обеспечение надежности магистральных газопроводов. - Тула: Гриф и К, 2003. - 130 с.
Чекинов Г.П., Чекинов С.Г. Ситуационное управление: состояние и перспективы // Информационные технологии. - 2004. - №2. -Приложение
Приложение А
Текст программы управления безопасностью магистральных газопроводов:
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.