Алгоритм классификации магматических горных пород
Отчёт
Июнь 2010
ГГМ РАН, отдел ГИС, руководитель: В.М. Ряховский.
петрология: Д.И. Кудрявцев.
алгоритмика: А.В. Шкотин.
http://rundumzug.ch/index.html
Первоисточником алгоритма является [1]. Алгоритм представлен в виде блок-схем, а пишется на языке Pascal. Программа [2] содержит в комментариях текст первоисточника, обосновывающий код, описание проблем и принятые решения.
В отчёте суммированы идеи и задачи разработки и описаны принятые решения и оставшиеся проблемы.
Алгоритм и необходимые определения даны для ультрамафических видов плутонических горных пород. Детальное обсуждение и решение оставшихся проблем должно подтвердить правомерность подхода формализации. После чего он может быть распространён на другие разделы первоисточника.
Три основных цели проекта:
- уточнение правил классификации;
- выявление формальных определений видов горных пород;
- создание программы классифицирующей образец по его характеристикам.
Замечание: в отчёте будут использоваться исходные английские термины для обозначения минералов, видов пород и других формализуемых терминов.
Принятые обозначения и термины:
VPC означает Volume Percentage Content - объёмное процентное содержание обычно минерала в образце, известное также как модальное содержание.
sb1 (сокращение для solid body 1) - обозначает запись со сведениями об образце, к которой применяется алгоритм. В исчислении предикатов обозначает переменную.
Функцию алгоритма (например, ultramafic_rock_type), которая получает на вход запись с характеристиками образца породы, а возвращает наименование вида породы этого образца, назовём классифицирующей (образец).
:= означает на блок-схеме оператор (действие) присваивания переменной значения.
Отношения между числами будут обозначаться так: > - "больше", ≥ - "больше или равно", < - "меньше", ≤ - "меньше или равно".
Функцию, которая возвращает истинностное значение (true, false) будем называть предикат.
Подход написания алгоритма
Следующие идеи имелись в виду:
Обоснование кода. Любая часть кода реализующая логику классификации должна быть обоснована текстом из первоисточника [1]. Таким образом алгоритм является дальнейшей формализацией (и уточнением!) правил классификации первоисточника.
Преимущество записи алгоритма в виде Pascal программы состоит в её применимости к сведениям об образцах для автоматической классификации.
Представление сведений об образце. Следуя модели данных RDF[3] сведения об образце, к которым применяется алгоритм, представляются простым двухуровневым деревом: корневой узел представляет сам образец и помечен его уникальным (возможно глобально) идентификатором, исходящие стрелки помечены (однозначно) идентификаторами функций (величин или предикатов) измеренных на образце, а на конце каждой стрелки расположен свой узел-литерал со значением функции.
Такие функции непосредственно измеренные на образце и заданные на его RDF-графе будем называть фундаментальными.
Так если некоторому образцу сопоставлен идентификатор GEOCHEM007, то сведения о его минеральном составе будут представлены стрелками (например, VPC_melilite), исходящими из узла GEOCHEM007 и входящими в литеральные узлы (например, помеченный числом 10). Чему соответствует математическая формула
VPC_melilite(GEOCHEM007)=10.
Эта привычная формула на RDF-графе трактуется так: если из узла помеченного GEOCHEM007 перейти по ходу стрелки помеченной VPC_melilite то метка узла, в котором мы окажемся будет равна 10.
Об алгоритмике. Алгоритм задан совокупностью блок-схем функций, в узлах которых либо действие либо условие. Узлы-условия легко отличить т.к. из них выходит две стрелки помеченные true и false.
Каждая функция закодирована на языке Pascal расширения Free Pascal Compiler. Этот язык содержит тип данных string.
Здесь по ходу дела будут собраны описания других аналогичных продуктов.
IUGS. CDG
...
IUGS-IgneousClassFlowChart
http://www.geol.lsu.edu/henry/Geology3041/lectures/02IgneousClassify/IUGS-IgneousClassFlowChart.htm
C++ для TAS
...
WinRock
http://www.geologynet.com/download.htm
http://www.geologynet.com/manuals/WinRockMan.pdf
Запрограммированы все диаграммы!
см. "Modal Menu" p.11-12(16-17).
Наши (вошедшие в отчёт) диаграммы озаглавлены:
Ultramafic Ol/OPx/CPx - Olivine/Orthopyroxene/Clinopyroxene ultramafic rocks.
Ultramafic Ol/Px/Hbl - Olivine/Pyroxene/Hornblende ultramafic rocks.
WinRock Wizzard
(http://www.geologynet.com/wizard/wrwizsp.exe) - бесплатно.
пример использования:
1. выбрать группу (одну из 5и): выбираем igneous.
2. выбрать семейство (в том числе: "Ultramafic OlOPxCPx"): его и выбираем.
3. запрашивают относительные VPC для "диаграммных": вводим для harburgite.
4. показывают диаграмму и точку на ней.
Объёмное процентное содержание минералов
Нам понадобятся функции объёмного процентного содержания минералов в образце. Полный состав минералов необходимых алгоритму выяснится постепенно. Пока понадобились следующие функции одного аргумента:
VPC_melilite():real;
VPC_kalsilite():real;
VPC_leucite():real;
VPC_Ol():real;
VPC_Opx():real;
VPC_Cpx():real;
VPC_hornblende():real;
VPC_garnet():real;
VPC_spinel():real;
VPC_biotite():real;
Эти функции будут считаться фундаментальными (далее не определяемыми), а значит их значения должны быть заданы на каждом образце.
Используя эти фундаментальные функции будут даны определения других "сложных" функций. См. например определение функции VPC_Px().
Модальное содержание carbonate minerals (VPC_carbonates)
Определение этой функции в [1] ещё не рассматривалось.
Стоит иметь в виду определение из http://en.wikipedia.org/wiki/Carbonate_minerals:
"Carbonate minerals are those minerals containing the carbonate ion: CO32-.".
Модальное содержание пироксенов (VPC_Px)
Этот показатель нужен для классификации некоторых плутонических пород.
Definition VPC_Px:
VPC_Px(sb1) = VPC_Opx(sb1)+VPC_Cpx(sb1)
Обсуждение: список http://en.wikipedia.org/wiki/Pyroxene#Pyroxene_minerals подтверждает формулу.
Показатель мафичности M (VPC_M)
функция VPC_M():real возвращает объёмное процентное содержание минералов группы M в образце (о группе см. стр. 4, 28).
Решение 28-0. Все минералы упомянутые в первом предложении на стр.28 считать принадлежащими группе M.
Обсуждение: скорее всего это не так для garnet и spinel.
Definition VPC_M:
VPC_M(sb1) = VPC_Ol(sb1) + VPC_Opx(sb1) + VPC_Cpx(sb1) + VPC_hornblende(sb1)
+ VPC_biotite(sb1) + VPC_garnet(sb1) + VPC_spinel(sb1)
Задача 4-1: обработать описание на стр.4 - "M = mafic and related minerals, e.g. mica, amphibole, pyroxene, olivine, opaque minerals, accessory minerals (e.g. zircon, apatite, titanite), epidote, allanite, garnet, melilite, monticellite, primary carbonate."
Проблема 4-1: Полный список минералов группы M не известен.
см. также http://en.wikipedia.org/wiki/Mafic
Группировки минералов для диаграмм (VPC_OOC, VPC_OPH)
По определению:
VPC_OOC(sb1) := VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)
VPC_OPH(sb1) := VPC_Ol(sb1)+VPC_Px(sb1)+VPC_hornblende(sb1)
plutonic rocks
На стр.21 (см. "ксерокс" в приложении) описаны тонкости отнесения к plutonic и volcanic, а также именования в "пограничном" случае.
Это пока не внесено в алгоритм и может потребовать такой "субъективной" характеристики образца как "глубина формирования".
Далее части алгоритма приписываются конкретным секциям первоисточника, продолжением текста которых они фактически являются. В результате получается описание "сверху-вниз" - от вызывающих к вызываемым функциям.
Алгоритм верхнего уровня закодирован классифицирующей функцией rock_type.
Именно эту функцию надо вызывать чтобы классифицировать образец.
Далее приводятся предложения первоисточника и их формализация, которая по большей части очевидна, но два случая требуют пояснения и описаны в конце в обсуждении.
За формализацией следует блок схема и обсуждение.
2.1.3 "Using the classification", p.6. начальные инструкции
Исходный текст для алгоритма находится на стр.6 первоисточника (ксерокопию страницы см. в приложении).формализация:Для каждой порции исходного текста даётся формальное условие перехода к соответствующей секции.
"(1) if the rock is considered to be of pyroclastic
origin go to section 2.2 “Pyroclastic Rocks
and Tephra” on p.7"
Assumption 6-1: Tephra is pyroclastic."
pyroclastic(sb1)
"(2) if the rock contains > 50% of modal car-
bonate rocks go to section 2.3 “Carbonatites” on
p.10"
VPC_carbonates(sb1)>50
"(3) if the rock contains > 10% of modal melilite
go to section 2.4 “Melilite-bearing Rocks”
on p.11"
VPC_melilite(sb1)>10
"(4) if the rock contains modal kalsilite go to
section 2.5 “Kalsilite-bearing Rocks” on
p.12"
VPC_kalsilite(sb1)>0
"(5) check to see if the rock is a kimberlite as
described in section 2.6 on p.13"
kimberlite(sb1)
"(6) check to see if the rock is a lamproite as
described in section 2.7 on p.16"
lamproite(sb1)
"(7) if the rock contains modal leucite go to
section 2.8 “Leucite-bearing Rocks” on p.18"
if VPC_leucite(sb1)>0
"(8) check to see if the rock is a lamprophyre as
described in section 2.9 on p.19. Note ..."
lamprophyre(sb1)
"(9) check to see if the rock is a charnockite as
described in section 2.10 on p.20"
charnockite(sb1)
"(10)if the rock is plutonic, as defined in section
2.1, go to section 2.11 “Plutonic rocks” on
p.21"
plutonic(sb1)
"(11)if the rock is volcanic, as defined in section
2.1, go to section 2.12 “Volcanic rocks” on
p.30"
volcanic(sb1)
"(12)If you get to this point, either the rock is not
igneous or you have made a mistake."
abort("either the rock is not igneous or you have made a mistake")
abort() - не условие а действие "аварийного" завершения алгоритма.
Замечание: вполне возможно, что когда будут даны определения для предикатов условий приведённых выше окажется, что их объединение будет всегда верно. И наоборот - если это не так, то всегда найдётся (теоретически) сочетание характеристик образца магматической породы, которое приведёт к abort.
2.11 “Plutonic rocks”, p.21. два варианта классификации
"
(1) if M is less than 90% the rock is classified
according to its felsic minerals, using the
now familiar QAPF diagram (Fig. 2.4),
or the QAPF double triangle (section 2.11.1)
VPC_M(sb1) < 90
(2) if M is greater or equal to 90%, it is an
ultramafic rock and is classified according
to its mafic minerals, as shown in section
2.11.2, p.28"
VPC_M(sb1) ≥ 90
Блок-схема
Обсуждение
Одноместные предикаты, использованные в формулах, будем называть предикатами верхнего уровня. 4 формулы основаны на модальном минеральном составе образца (они начинаются с VPC).
Определения предикатов верхнего уровня ещё не даны. Но предполагается, что они не являются фундаментальными предикатами и у образца будут указаны "физические" характеристики на основе которых будет дано их определение.
Большинство предикатов непосредственно употребляются в тексте первоисточника и так как сам текст написан в стиле алгоритма его формализация выполнена "один к одному" (см. часть кода программы озаглавленную '2.1.3 "Using the classification", page 6').
Но в двух случаях пришлось сделать предположения. Заодно рассмотрим "преобразование" текста в код.
Случай 6-1.
Текст:
"(1) if the rock is considered to be of pyroclastic
origin go to section 2.2 “Pyroclastic Rocks
and Tephra” on p.7
"
Чтобы не вводить предикат "pyroclastic_origin" предположим, что
Предположение 6-1: Tephra является pyroclastic.
И критерий перехода к алгоритму секции 2.2 выглядит так:
pyroclastic(sb1)
Случай 6-2.
Текст:
"(7) if the rock contains modal leucite go to
section 2.8 “Leucite-bearing Rocks” on p.18
"
Теоретически "contains" может означать "значительное количество" (например >5%) пока же сделано предположение
Предположение 6-2: "contains" означает ">0".
И критерий перехода к алгоритму секции 2.8 выглядит так:
VPC_leucite(sb1)>0
Алгоритм написан на основе текста параграфа 2.11.2 "ULTRAMAFIC ROCKS (M > 90%)", стр.28-29 (см. [1] или приложения).
Каждая из диаграмм применяющихся для классификации ультрамафических пород реализована в виде отдельной классифицирующей функции, которая фактически возвращает наименование зоны треугольника исходя из характеристик образца. Для верхнего треугольника функция названа OOC_diagram_field, для нижнего - OPH_diagram_field.
2.11.2 "ULTRAMAFIC ROCKS (M > 90%)", стр.28-29
p.28:
" The Subcommission
(Streckeisen, 1973, 1976) recommended two
diagrams, both of which are shown in Fig. 2.9.
One for the rocks consisting essentially of olivine,
orthopyroxene, and clinopyroxene, and the
other for rocks containing hornblende,
pyroxenes, and olivine.
"
Решение 28-1: как критерий выбора между диаграммами выбрано наличие или отсутствие в образце hornblende:
VPC_hornblende(sb1) = 0 - для верхней диаграммы
VPC_hornblende(sb1) > 0 - для нижней.
Основную часть функции ultramafic_rock_type, составляют инструкции по добавлению квалификационного имени к имени породы в случае, когда образец содержит garnet или spinel.
p.29 "
Ultramafic rocks containing garnet or spinel
should be qualified in the following manner. If
garnet or spinel is less than 5% use garnet-
bearing peridotite, chromite-bearing dunite etc.
If garnet or spinel is greater than 5% use garnet
peridotite, chromite dunite etc.
"
Решение 29-1: квалификация для garnet и spinel определяется независимо. При присутствии в образце обоих минералов порядок слов квалификации - по возрастающей концентраций.
Критерий "входа" в квалификацию: VPC_garnet(sb1) + VPC_spinel(sb1) > 0
Далее указаны критерии квалификации и соответствующее добавляемое имя:
(VPC_garnet(sb1) >0) and (VPC_garnet(sb1) < 5) 'garnet-bearing_'
(VPC_garnet(sb1) ≥ 5) 'garnet_'
(0 < VPC_spinel(sb1)) and (VPC_spinel(sb1) < 5) 'chromite-bearing_'
(VPC_spinel(sb1) ≥ 5) 'chromite_'
Вопрос к IUGS 29-2 (терминологический): Почему порода объявляется обогащённой хромитом, на основании высокого содержания шпинели? Более естественным кажется использовать "spinel" вместо "chromite" в квалификации, т.е. "spinel-bearing", "spinel".
Блок-схема
Две диаграммы Fig.2.9, стр.28 (см. приложение) формализованы в виде функций: OOC_diagram_field (верхний треугольник), OPH_diagram_field (нижний треугольник).
Формализация диаграмм требует некоторых уточнений:
- вычисления координат точек пересечения некоторых линий;
- решения какому из полей (именованных зон) диаграммы принадлежит граничная линия ("граница").
Алгоритм классифицирующей функции диаграммы намеренно выполнен как "цепочка" if-узлов каждый из которых "отвечает" за одну конкретную именованную зону диаграммы. Каждое условие представляет собой систему линейных неравенств. Совокупность таких условий обладает важными математическими свойствами:
- каждые два условия не совместны, т.к. соответствующие им зоны не пересекаются.
- объединение всех условий вместе даёт неравенства для треугольника, т.к. условия "покрывают" весь треугольник.
Интересно, что описанные свойства могут быть проверены "автоматически", если определения "загрузить" в машину вывода работающую с линейными неравенствами. И такие МВ есть (например, Racer).
Remark OOC-1: number 10 on the diagram looks like misprinting, as it's assigned to line of Opx value and should be 90!
Remark OOC-2: lines of internal triangle has value 5. As at it's vertex we have that this value twice plus 90 gives 100.
Remark OPH-1: number 10 on the diagram looks like misprinting, as it's assigned to line of Px value and should be 90!
Remark OPH-2: lines of internal triangle has value 5. As at it's vertex we have that this value twice plus 90 gives 100.
Блок-схема OOC_diagram_field (верхний треугольник)
Блок-схема OPH_diagram_field (нижний треугольник)
Алгоритм классификации содержит в неявном виде определения всех видов магматических горных пород.
Из него можно получить определения в виде формул исчисления предикатов первого порядка с числами.
Выразимость определения формулой того или иного вида говорит о "сложности" понятия, стоящего за термином, а также указывает все понятия на которые опирается данное. Что чрезвычайно важно для поиска фундаментальных понятий.
not_first_9. вспомогательный предикат
нам понадобится вспомогательный предикат:
Definition:
not_first_9(sb1) = not pyroclastic(sb1) and not VPC_carbonates(sb1)>50 and not VPC_melilite(sb1)>10 and not VPC_kalsilite(sb1)>0 and not kimberlite(sb1) and not lamproite(sb1) and not VPC_leucite(sb1)>0 and not lamprophyre(sb1) and not charnockite(sb1)
который верен в том случае если образец не удовлетворяет первым 9ти условиям верхнего уровня.
Преобразуем формулу справа применив отрицания:
not pyroclastic(sb1) and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and not kimberlite(sb1) and not lamproite(sb1) and VPC_leucite(sb1)=0 and not lamprophyre(sb1) and not charnockite(sb1)
Перегруппируем and-члены:
not pyroclastic(sb1) and not kimberlite(sb1) and not lamproite(sb1) and not lamprophyre(sb1) and not charnockite(sb1)
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0
Вынесём not за скобки:
not (pyroclastic(sb1) or kimberlite(sb1) or lamproite(sb1) or lamprophyre(sb1) or charnockite(sb1))
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0 (nf9-4)
harzburgite
Рассмотрим ситуацию на примере породы harzburgite. Предикат harzburgite() будучи применён к образцу (его характеристикам) должен давать true если образец является harzburgite, а в противном случае - false.
Definition harz-1:
harzburgite(sb1) =
not_first_9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and
(0.4*VPC_OOC(sb1) ≤ VPC_Ol(sb1)) and (VPC_Ol(sb1) ≤ 0.9*VPC_OOC(sb1)) and (0 ≤ VPC_Cpx(sb1)) and (VPC_Cpx(sb1) < 0.05*VPC_OOC(sb1))
Подставим формулу (nf9-4) для not_first_9 и перегруппируем and-члены:
not (pyroclastic(sb1) or kimberlite(sb1) or lamproite(sb1) or lamprophyre(sb1) or charnockite(sb1)) and plutonic(sb1)
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0 and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and (0 ≤ VPC_Cpx(sb1))
and (0.4*VPC_OOC(sb1) ≤ VPC_Ol(sb1)) and (VPC_Ol(sb1) ≤ 0.9*VPC_OOC(sb1)) and (VPC_Cpx(sb1) < 0.05*VPC_OOC(sb1))
И, наконец, подставляя функцию
VPC_OOC(sb1) := VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)
получаем определение через первичные элементы:
Definition harz-2
harzburgite(sb1) =
not (pyroclastic(sb1) or kimberlite(sb1) or lamproite(sb1) or lamprophyre(sb1) or charnockite(sb1)) and plutonic(sb1)
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0 and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and (0 ≤ VPC_Cpx(sb1))
and (0.4*(VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)) ≤ VPC_Ol(sb1)) and (VPC_Ol(sb1) ≤ 0.9*(VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1))) and (VPC_Cpx(sb1) < 0.05*(VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)))
Таким образом точное определение вида магматической горной породы harzburgite состоит из трёх частей:
1. качественные характеристики (первая строка);
2. абсолютные ограничения на модальный состав (вторая строка);
3. относительные ограничения на модальный состав (третья строка).
Проблема harzburgite-1. В формуле нигде не сказано, что Ol, Px должны составлять основную массу образца. Можно представить образец, состоящий в основном (например, на 70%) их anthophyllite, который судя по всему есть минерал группы M (см. стр.4 [1]), а ещё на 25% из Ol, Cpx, Opx. Такой образец тоже будет классифицирован как harzburgite при попадании в границы относительных пропорций?
dunite
Формула для dunite интересна тем, что сам он упоминается на двух диаграммах поэтому (редкий случай!) она содержит "or":
Definition
dunite(sb1) =
not_first_9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and (0.9*VPC_OOC(sb1) < VPC_Ol(sb1)) and (0 ≤ VPC_Opx(sb1)) and (0 ≤ VPC_Cpx(sb1))
or
not_first_9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)>0 and (0.9*VPC_OPH(sb1) < VPC_Ol(sb1)) and (0 ≤ VPC_Px(sb1)) and (0 ≤ VPC_hornblende(sb1))
Получено первое приближение формального определения вида магматической горной породы, которое пока оказалось системой линейных неравенств.
А для них существуют эффективные машины вывода.Что даёт возможность применять формулы для автоматической классификации образцов, а также анализировать всю совокупность определений математическими методами. Аналогично даются и определения собирательных терминов (collective terms).
Важным результатом алгоритмизации является выявление фундаментальных предикатов и функций, которые используются в определениях других, именно они будут "символами теории" при построении теории исчисления предикатов первого порядка для предметной области магматических горных пород.
Дальнейшие работы:
- наиболее интересными и важными являются определения предикатов верхнего уровня алгоритма, т.к. на уровне диаграмм "правит" модальность.
- полная алгоритмизации всех вариантов классификации.
- автоматическое построение определений по алгоритму.
- создание теории исчисления предикатов первого порядка, содержащей определения всех терминов для видов магматических горных пород и их группировок.
- загрузка определений в машину вывода (например, Racer) для автоматического построения иерархии терминов, анализа свойств системы определений и классификации образцов.
- выявив состав фундаментальных символов интересно посмотреть можно ли на них записать какие-либо геологические аксиомы с кванторами.
1. Igneous Rocks: A Classification and Glossary of Terms или http://amigoreader.com/book/?b=29372
2. текст Pascal программы см. text.
3. http://ru.wikipedia.org/wiki/Resource_Description_Framework