23651

Поиск пути в порождаемом пространстве состояний (на примере игры «восьмёрка»)

Лабораторная работа

Информатика, кибернетика и программирование

1й список исходное состояние 2й список состояние после одноходовой допустимой перестановки. попадания в пройденные вершины графа необходимо вести список пройденных состояний. Здесь Yсписок характеризующий начальное состояние; Xs список характеризующий заданное конечное состояние. Третий аргумент предиката trans1 список пройденных состояний список списков.

Русский

2013-08-05

97.5 KB

6 чел.

Лабораторная работа № 3

Поиск пути в порождаемом пространстве состояний (на примере игры «восьмёрка»)

Задание №3.1. Продукционная модель поиска с использованием оценочной функции Хэмминга.

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

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

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

Однако использование оценочной функции не всегда приводит к решению. Это можно объяснить двумя причинами: 1) ограниченностью стековой памяти Пролога (это ограничение снимает Visual Prolog); 2) сегментацией пространства поиска на непересекающиеся подпространства, вследствие чего выбор исходного и конечного состояний в разных подпространствах никогда не приведет к решению.

Обратимся к известной игре “восьмёрка“, которая может служить хорошей моделью задач с большим поисковым пространством (число возможных состояний - 9!). На игровом поле имеется 9 фиксированных позиций Р1...Р9, пронумерованных слева направо построчно. На этом поле располагаются в произвольном порядке восемь фишек, пронумерованных цифрами от 1 до 8. Одна позиция свободна. Число, которым помечена данная фишка, является содержимым позиции, в которой эта фишка располагается. Состояние задачи можно представить в виде списка фишек, располагающихся в позициях Р1...Р9. В игре задаются начальное и конечное состояния задачи, например:

Начальное состояние:

         

4

5

7

2

1

3

8

6

                                     

        Или в виде списка: [4,0,5,7,2,1,3,8,6]

        Конечное состояние:

3

4

8

7

1

5

2

6

                    

        

Или в виде списка: [3,4,8,7,1,5,0,2,6]

 

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

  Правила игры определяются допустимыми перемещениями. Если пустая позиция находится в левом верхнем углу, то имеется всего 2 допустимых варианта перемещений. Для изображённого на верхнем рисунке  начального состояния возможных перемещений три. Типичных положений пустой позиции всего три: в одном из углов, в середине одной из боковых сторон и в центре. Число возможных ходов в каждом из этих положений равно соответственно 2, 3 и 4. Не сложно подсчитать, что для 9 положений пустой позиции общее число допустимых ходов составит 24.

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

ptrans ([P1,0,P3,P4,P5,P6,P7,P8,P9],   [0,P1,P3,P4,P5,P6,P7,P8,P9]).

  ptrans ([P1,0,P3,P4,P5,P6,P7,P8,P9],   [P1,P3,0,P4,P5,P6,P7,P8,P9]).

  ptrans ([P1,0,P3,P4,P5,P6,P7,P8,P9],   [P1,P5,P3,P4,0,P6,P7,P8,P9]).

   Предикат ptrans имеет два аргумента, каждый из которых является списком. 1-й список - исходное состояние, 2-й список - состояние после одноходовой допустимой перестановки. Общее число предикатов ptrans  равно 24. Решение задачи сводится к поиску пути в неориентированном графе, где каждая его вершина является состоянием задачи, характеризуемым списком значений переменных P1,P2, ... .  Состояние должно трансформироваться от начального к целевому, т.е. поиск является прямым.   Для исключения повторения позиций (т.е. попадания в пройденные вершины графа) необходимо вести список пройденных состояний. Для задания начального состояния этого списка можно воспользоваться следующим переопределением цели в правиле самого верхнего уровня trans:

trans(Y, Xs, B): -  trans1(Y, Xs, [Y], B), !, fprintf(B).

trans1(Xs, Xs, _, [Xs]).

Здесь Y-список, характеризующий начальное состояние; Xs - список, характеризующий заданное конечное состояние. Третий аргумент предиката trans1 - список пройденных состояний (список списков). Как видно, вначале этот список содержит только один элемент - список Y, описывающий начальное состояние  задачи. B - искомый путь из Y в Xs (список списков пошаговой трансформации позиции) Для проверки членства списка в списке списков подходит уже использовавшееся нами правило member с той лишь разницей, что первый его аргумент надо описать как список, а второй - как список списков.

  Для реализации поиска  в глубину можно использовать в качестве основы программы правило рекурсии по типу программы поиска пути в неориентированном графе (см. Задание  № 1.3 из Лаб. раб. № 1). Правило будет состоять из  24 предложений, каждое из которых можно интерпретировать как правило продукции. В левой его части стоит образец с определенным положением пустой позиции, а в правой – даны варианты допустимых перестановок.  Предложения можно разбить на 9 групп по положению пустой позиции. Число предложений в группе будет от 2-х до 4-х, в зависимости от положения пустой позиции. Приведём 2 предложения одной группы для пустой позиции в левом верхнем углу:

 

trans1([0,P2,P3,P4,P5,P6,P7,P8,P9], Xs, Vis,  [[0,P2,P3,P4,P5,P6,P7,P8,P9]|P]):-

                 ptrans([0,P2,P3,P4,P5,P6,P7,P8,P9],  [P4,P2,P3,0,P5,P6,P7,P8,P9]),

                 ham([P4,P2,P3,0,P5,P6,P7,P8,P9], Xs, H1),

                 ptrans([0,P2,P3,P4,P5,P6,P7,P8,P9],  [P2,0,P3,P4,P5,P6,P7,P8,P9]),

                 ham([P2,0,P3,P4,P5,P6,P7,P8,P9], Xs, H2),   H1<=H2,

                 not(member([P4,P2,P3,0,P5,P6,P7,P8,P9], Vis)),

trans1([P4,P2,P3,0,P5,P6,P7,P8,P9], Xs,  [[P4,P2,P3,0,P5,P6,P7,P8,P9] | Vis], P).

trans1([0,P2,P3,P4,P5,P6,P7,P8,P9], Xs, Vis,  [[0,P2,P3,P4,P5,P6,P7,P8,P9] | P]):-

                 ptrans([0,P2,P3,P4,P5,P6,P7,P8,P9],   [P2,0,P3,P4,P5,P6,P7,P8,P9])

                 not(member([P2,0,P3,P4,P5,P6,P7,P8,P9], Vis)),      

trans1([P2,0,P3,P4,P5,P6,P7,P8,P9], Xs,  [[P2,0,P3,P4,P5,P6,P7,P8,P9] | Vis], P).

    В отличие от классической продукционной системы, в которой очередное правило активизируется текущими данными, здесь каждое из 24-х правил (предложений) само может вызывать следующее рекурсивно по совпадению в нем пустой позиции после выполненной перестановки. В результате система работает подобно продукционной. Интерпретатор Пролога просматривает при каждом шаге все предложения сверху вниз до совпадения положения пустой позиции в списке текущего состоянии задачи и в одном из предложений правила trans1. При таком совпадении предложение считается выбранным и происходит означивание его переменных Р1...Р9. Допустимые перестановки задаются предложениями ptrans. В данном примере в первом предложении указаны 2 возможные перестановки ptrans. Как выбрать лучший ход ptrans  из двух возможных? Для этого служит оценочная функция  ham, в качестве которой взято так называемое расстояние Хэмминга - число несовпадений элементов в попарно сравниваемых списках позиций. C помощью правил ptrans имитируются, в данном случае, два пробных хода и для каждого из них вычисляется значение функции Хэмминга, возвращаемые как H1 и H2. Первый аргумент в функции ham - список, который образовался бы  после данного хода. Второй список - целевая  конечная позиция Xs. Должен выбираться тот ход, для которого расстояние Хэмминга (N - число несовпадающих элементов в сопоставляемых списках) выражается меньшим числом. При достижении цели  N = 0. Правило для вычисления расстояния Хэмминга :

ham([ ], [ ], 0).

ham([X|Xs], [X|Y], N): -  ham(Xs, Ys, N), !.

ham([_|Xs], [_|Ys], N): -  ham(Xs, Ys, N1), N = N1 + 1.

Первые два аргумента ham - сопоставляемые списки, третий - возвращаемое значение функции Хэмминга N. Первое предложение - очевидное условие окончания рекурсии: если списки пусты, т.е. целиком рассмотрены, то N=0. Второе предложение относится к случаю, когда совпадают головные элементы в списках. В этом случае они отделяются от своих списков и идёт рекурсивный вызов правила ham с хвостовыми частями исходных списков, а значение N не меняется. Третье предложение  обрабатывает случай несовпадения очередных головных элементов списков. Здесь головные элементы также отделяются от своих хвостовых частей и идет рекурсивное обращение к ham с хвостовыми списками, но с новым значением функции ham (третьего аргумента N1), связанного с N рекурсивным  соотношением N = N1  + 1. Разворачивание рекурсии идёт до тех пор, пока сопоставляемые списки не станут пустыми. При возврате рекурсии переменные N и N1 получат свои значения на каждом шаге рекурсии в обратном  порядке, тем самым будет найдено искомое значение N. Фактически переменная N получит значение числа обращений к 3-ему предложению, которое равно числу несовпадений.

         Итак, значение функции Хэмминга может быть найдено для двух (в данном примере) предполагаемых ходов. В первом предложении trans1 предусмотрен случай, когда H1<=H2, то есть первый ход ptrans лучше. Далее с помощью правила member проверяется условие, что данная перестановка не входит в список пройденных состояний Vis, и если это условие выполнено, то предикат trans1 выполняет выбранную перестановку, добавляет её в список Vis и рекурсивно обращается к одному из правил trans1 с новым положением пустой позиции (в данном случае пустой станет четвёртая позиция).  Если условие H1<=H2 не выполнено , то интерпретатор Пролога автоматически обращается к следующему предложению  trans1,которое без дополнительных проверок выполняет единственно возможный альтернативный ход.

Условие окончания рекурсии в правиле высшего уровня (всё правило  приводилось выше):

        trans1 (Xs, Xs, _ , [Xs]).

        Оно означает, что если текущее состояние (первый аргумент) совпало с конечным Xs , то путь равен единственному элементу списка списков [Xs] . В этот момент переменная P в вызывающем предикате trans1 принимает значение Xs . При возврате рекурсии в голову списка списков  пути будут добавлены обратном порядке все пройденные состояния (списки). Полученный список списков (путь) будет унифицироваться с искомой целью - списком B в вызывающем предикате trans1 правила верхнего уровня trans .

В правиле trans предусмотрена возможность вывода искомого списка трансформаций состояний в файл, так как список часто не помещается на экране. Для этого вызывается правило fprintf(B), где B - найденный (в случае успешного поиска) список списков трансформации состояний:

fprintf(List): - openwrite(fp, ’’lab3.lst’’),  writedevice(fp),

write(«List of transformations:»), nl,  file_string(List, 0),

writedevice(screen), closefile(fp).

file_string([], _).

file_string([String|Tail], I1): - I = I1 + 1,  write(I), write(«   »),

write(String),  nl,  file_string(Tail, I).

Подчинённое правило file_string предназначено для построчной печати в файл всех трансформаций состояния от исходного до конечного с соответствующими  порядковыми номерами в переменной I.

Самостоятельная часть работы

Для нормальной работы программы увеличьте ресурсы ОП, в частности, code array size  до 4000 (paragraphs);  stack size до 2000. Выполните соответствующие установки, используя опции:

           Options/Compiler directives/Memory allocation

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

Начальное состояние          Конечное состояние      Число ходов

[5,0,2,7,4,1,3,8,6]                  [3,5,4,8,7,2,6,1,0]                   14

[5,0,2,7,4,1,3,8,6]                  [0,5,4,3,7,2,8,6,1]                   10

[4,0,5,7,2,1,3,8,6]                  [4,5,7,2,8,1,3,0,6]                   95

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

  •   Выполните трассировку  программы на 2-ом из вышеприведенных примеров, в котором решение отыскивается за 10 ходов. Просмотрите список  начальных ходов, которые делает программа при поиске решения. Соответствует ли он минимальным значениям функции Хэмминга? Если не соответствует, т.е. программа выбрала в конечном итоге иное решение, то как это объяснить?

Убедитесь на собственных примерах в том, что программа не всегда отыскивает решение. Например, в примере 1 (см.выше) достаточно поменять местами фишки 6 и 1 в конечном состоянии. В чём, по Вашему, причина этого?

Влияет ли на результат поиска порядок расположения предложений правила trans1? Например, поставьте в начало группу предложений с пустой пятой позицией (т.е. с наибольшим числом возможных ходов). Эта перестановка реализована в файле lab3_1m.pro.

Попытайтесь определить “точку возврата” на графе пространства состояний после начального неудачного поиска целевой вершины в глубину в примере 2. В чем же тогда роль функции Хэмминга?

Задание №3.2. Компактное представление процедур перестановок позиций в игре “восьмерка”.

        Обсуждаемая ниже программа lab3_2.pro значительно меньше по объёму текста, чем предыдущая, за счёт более компактного представления правил допустимых перестановок и процедурной организации самих перестановок. Вместо громоздкого списочного представления перестановок (предикатов ptrans) рассмотрим факты near(n, m), где аргументы n и m - номера соседних ячеек, допускающих обмен содержимым:

near(1, 4).     near(2, 5).     near(3, 6).

near(4, 7).     near(5, 8).     near(6, 9).

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

        Всего таких фактов 12. Симметрию  отношений соседних позиций N и M можно отобразить правилом permut, подобным правилу con в Задании  № 1.3:

permut(N, M): - near(N, M).

permut(N, M): - near(M, N).

Как видим, общее число перестановок (24) не изменилось. Правило верхнего уровня:

search(ST, WST, PD): - src(ST, WST, [ST], PD),nl,   write("Order of moving:"),nl,

                    writelist(PD), nl,!.

Здесь ST и WST – списки соответственно исходной и конечной позиций. PD – возвращаемый список  перемещаемых фишек. Для поиска PD предикат src вызывает основное правило:

src(WST, WST, _, [ ] ).

src(ST, WST, Vis, [Xa|FP]): -  getnx(ST, 0, N),

findall(V, variant(ST, WST, Vis, N, V), LV), min(LV, MinV),

permut(N, M),  getxn(ST, M, Xa),  xchgxnm(ST, N, M, FST),

ham(FST, WST, MinV), not(member(FST, Vis)),

src(FST, WST, [ST|Vis], FP).

        Аргументы предиката src (по второму предложению): ST-исходное состояние (список), WST- целевое состояние (список), Vis-список пройденных состояний (список списков), [Xa|FP] – возвращаемый список перемещаемых фишек (ходов) Xa.

Предикат getnx вызывает правило нахождения номера N (возвращаемое значение в третьем аргументе) заданного вторым аргументом содержимого ячейки в текущем списке ST. В данном случае нас интересует положение пустой позиции. Это значение (N) передается предикату variant, запускаемому неоднократно с помощью предиката findall.

variant(ST, WST, Vis, N, V): - permut(N, M), xchgxnm(ST, N, M, FST),

                          not(member(FST, Vis)), ham(FST,  WST, V).

Здесь N- заданный номер пустой позиции, V- возвращаемое значение функции Хэмминга. Правило permut находит по фактам near (_,_) номер одной из соседних по отношению к N позиции M (допустимый ход). Правило xchgxnm (см.ниже) выполняет пробную перестановку (обмен) в исходном состоянии ST содержимого ячеек N и M и выдаёт новое состояние FST. Правило member проверяет отсутствие перестановки FST в списке пройденных состояний Vis, а правило ham, описанное в предыдущем задании, вычисляет значение функции Хэмминга - число V несовпадающих позиций в сопоставляемых  состояниях FST и WST.

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

         Условие начала возврата рекурсии - первое предложение src. Это условие будет выполнено, когда очередное состояние совпадёт с целевым WST, при этом список ходов (третий аргумент) примет начальное значение []. По существу, правило src отыскивает обычным путём (см., например, лаб. раб. №1) путь в графе.

Рассмотрим подробнее работу подчиненных правил. С помощью правила getxn(ST,X,N) для состояния ST отыскивается номер позиции N, в которой находится фишка X. Так как нас интересует положение пустой позиции, то при вызове getnx задаём X = 0: getxn(ST,0,N)

   

        getnx([X|_],X,1).

        getnx([H|T],X,N):-getnx(T,X,M), N=M+1.

 Правило min получает на вход список значений функции Хэмминга возможных ходов LV и отыскивает в нем минимальный элемент MinV.

Далее в данной варианте программы приходится повторно выполнять группу правил permut,   xchgxnm(ST, N, M, FST), ham(FST, WST, MinV), not(member(FST, Vis)), которые уже выполнялись под управлением  правила variant.

Правило getXn(ST, M, Xa) берёт M-ый элемент, т.е. соседний с пустой позицией, из списка ST и помещает его в Xa (тем самым определяется перемещаемая фишка Xa).

Правило xchgxnm выполняет пробную перестановку содержимого позиций N и M с трансформацией состояния из ST в FST. Но теперь все эти пробные перестановки с помощью правил permut, getxn и xchgxnm будут повторяться до тех пор, пока значение функции ham не станет равным найденному ранее правилом min минимальному значению MinV. По этому условию правило ham фиксирует в своем аргументе FST лучшую перестановку, которая передается предикату рекурсивного вызова правила src. Соответствующий этой позиции ход Xa пополняет список ходов [Xa|FP].

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

xchgxnm(LI, N, M, LO): -  getxn(LI, N, Xn), getxn(LI, M, Xm),

putxn(LI, N, Xm, LOp),  putxn(LOp, M, Xn, LO).

        Задача правила - поменять во входном списке LI местами содержимое позиций N и M и выдать полученный список LO. Задача решается за 4 операции. Правило getxn (не путать с getnx!) при первом применении берёт N-ый элемент из списка LI и помещает его в переменную Xn - третий аргумент. При втором применении M-ый элемент того же списка помещается в Xm. Правило getxn выглядит так:

getxn([H|_], 1, H).

getxn([_|T], N, Y): -  M = N - 1,  getxn(T, M, Y).

        Остаётся вставить содержимое Xn и Xm в обратном порядке в список LI с заменой. Эту функцию выполняет правило putXn:

putxn([_|T], 1, X, [X|T]).

putxn([H|T1], N, X, [H|T2]): -  M = N - 1, putxn(T1, M, X, T2).

        Работу данного правила проследим на примере. Пусть в список [a,b,e,d] необходимо третьим номером вставить элемент «c» (с заменой).  

Тогда целью будет: putxn([a, b, e, d], 3, c, LOut) и протокол работы интерпретатора будет выглядеть следующим образом:

        /* по второму предложению правила putXn:

putxn([a|b, e, d], 3, c, LOut): -  M = 3 - 1,  putxn([b, e, d], 2, c, T2), где LOut =.[a|T2]

putxn([b|e, d], 2, c, [b|T3]): -  M = 2 - 1,  putxn([e, d], 1, c, T3)., где [b|T3] = T2

        /* По первому предложению:

        putxn([e|d], 1, c, [c|T4]),   при этом Т3 = [с|T4]

откуда следует, что T4=[d];  T3=[c,d];  T2=[b,c,d];   LOut=[a|T2]=[a,b,c,d]. Задача решена, место 3-го элемента занял «c», число элементов не изменилось.

Остальные правила данной программы  min, member, ham и writelist обычны и рассматривались ранее. Полный текст программы lab3_2.pro можно найти на прилагаемой дискете.

Ниже описаны изменения правил программы, с помощью которых решена задача устранения дублирования  правил permut(N, M),  getxn(ST, M, Xa),  xchgxnm(ST, N, M, FST), ham(FST, WST, MinV), not(member(FST, Vis)) в правилах src и variant. (Полный ее текст содержится в файле lab3_2m.pro). В предикат variant вместо последнего аргумента V введена структура hod(M, FST, V), обозначенная в предикате variant правила src как S. Она содержит в себе всю необходимую информацию о возможном ходе: переставляемую фишку M, получаемую при этом позицию FST и значение для нее функции Хэмминга.

variant(ST, WST, Vis, N, hod(M, FST, V)): - variant1(ST, WST, Vis, N, M, FST, V).

variant1(ST, WST, Vis, N, M, FST, V): - permut(N, M), xchgxnm(ST, N, M, FST),

                          not(member(FST, Vis)), ham(FST, WST, V).

                          

        src(WST, WST, _, []).

src(ST, WST, Vis, [Xa|FP]): - getnx(ST, 0, N),

                          findall(S, variant(ST, WST, Vis, N, S), LV),

                          min(LV, hod(M, FST, V)),

                          getxn(ST, M, Xa),

                          src(FST, WST, [ST|Vis], FP),

                          writelist(FST),!.

Всю эту информацию в структуру hod передает предикат variant1, который взял на себя функции предиката variant из первой программы, но в который добавлены аргументы М и FST. В результате многократного вызова правила variant из тела правила src с помощью предиката findall, последний собирает все структуры hod (ходы) в список LV и передает его новому правилу min, которое отличается тем, что ищет структуру hod с минимальным значением функции Хэмминга V. Автоматически получаем при этом сведения о соответствующих значениях аргументов М и FST без повторных обращений к перечислявшимся выше предикатам. Остальные операции остались практически без изменений. Текст программы получился компактным, однако эта программа потребляет больше ресурсов памяти, чем продукционный вариант, в чем можно убедиться на третьем примере из 1-го задания.

 

Самостоятельная часть работы

Напишите протоколы процедур getxn, getnx и других  подобно тому, как это сделано в тексте для процедуры putXn.

Объясните различия  программ lab3_2.pro и lab3_2m.

Сравните число ходов при решении вышеуказанных примеров программами trans и search.  Убедитесь, что для третьего примера максимальных ресурсов ОП (стек = 4000) для программы search недостаточно, в то время как программа trans решает задачу за 95 ходов. Как это можно объяснить?


 

А также другие работы, которые могут Вас заинтересовать

31050. Церковная реформа патриарха Никона. Раскол русской православной церкви 28 KB
  Церковная реформа патриархаНикона. В 1652г патриархом стал Никон. вечное важнее временного московское госво как всякое госво частное вселенская церковь вот что ближе к богу что олицетворяет на земле вечное все что не согласуется с вечным должно быть упразднено патриарх выше светского правителя В 1653г Никон разослал указ в котором говорилось: креститься щепотью в книгах велено было печатать Иисус вводились греческие богослужебные обряды и песнопения по киевским канонам все книги по богослужению велено было...
31051. Общественно-политическая мысль 1830-1850-х об исторических судьбах России 30 KB
  Общественнополитическая мысль 18301850х об исторических судьбах России. После расправы над декабристами вся общественная жизнь России была поставлена под строжайший надзор со стороны госва. Самодержавие крепостничество и православие объявлялись важнейшими устоями и гарантией от потрясений и смут в России. Центральная идея в концепции славянофилов убежденность в своеобразном пути развития России.
31052. Русское общество и гос-во в 18 веке. Внутр. и внешняя политика 29.98 KB
  В России в XVIII в. При Петре I в России окончательно утвердился абсолютизм Петр был провозглашен императором что означало усиление власти самого царя он стал монархом самодержавным и неограниченным. В России была проведена реформа государственного аппарата вместо Боярской думы учреждался Сенат в состав которого входили девять сановников ближайших Петру I. В России упразднялась должность патриарха наблюдение за церковью поручалось оберпрокурору Синода.
31053. Революционное движение в России в 19в (причины, особенности, этапы, крупнейшие организации) 37.5 KB
  Революционное движение в России в 19впричины особенности этапы крупнейшие организации В первой четверти 19в зародилась в России революционная идеология носителями которой были декабристы. Познакомившееся с политич движениями Запада во время освободительных походов передовое дворянство понимало что основой отсталости России является крепостное право. Реакционная политика в области просвещения и культуры создание Аракчеевым военных поселений участие России в подавлении революционных событий в Европе добавили уверенности в необходимости...
31054. Консервативные партии 53 KB
  Консервативные партии: Весна 1905г. Программа: основана на триаде Уварова Православие самодержавие народность Сохранение неограниченной власти царя и созыв Земского собора из излюбленных коренных русских людей Сохранение единой и неделимой Руси Неприкосновенность частной помещичьей собственности Сохранение господствующего положения русских Укрепление позиций РПЦ Действовали: боевые черносотенные дружины против революционеров Союз 17 октября Октябрь 1905 начало организованного оформления партии Февраль 1906г I...
31055. Эпоха Ивана Грозного. Внутренняя политика(реформы Избранной рады, опричнина, последние годы царствования). Историки о причинах и внутреннем смысле опричнины. Оценка роли эпохи Ивана Грозного в отеч истории 32.5 KB
  Эпоха Ивана Грозного. Оценка роли эпохи Ивана Грозного в отеч истории. В 1547 произошло венчание Ивана4 на царство. После пожара началось самостоятельное правление Ивана4.
31056. Внешняя политика в эпоху Ивана Грозного 29.5 KB
  Покорение Казани стало большим внешнеполитич успехом России. В 1556 была присоединена Астрахань у России оказались также земли Ногайской Орды. Для России Ливония была интересна прежде всего как выход в Балтику. Поводом к войне стала неуплата Ливонией России юрьевой дани в течение 50 лет.
31057. Россия в конце 16-нач18в. Смутное время: причины, содержание, этапы и итоги данной эпохи 40 KB
  Первый этап Смутного времени начался династическим кризисом вызванным убийством царем Иваном IV Грозным своего старшего сына Ивана приходом к власти его брата Федора Ивановича и смертью их младшего сводного брата Дмитрия по убеждению многих зарезанного приспешниками фактического правителя страны Бориса Годунова. В апреле 1605 после неожиданной смерти Бориса Годунова и непризнания его сына Федора царем на сторону Лжедмитрия I перешло и московское боярство. В июне 1605 самозванец почти на год стал царем Дмитрием I. Через два дня царем...
31058. Россия в 17в. – хоз-во, общество, политич строй и гос управление 31 KB
  Все население можно разделить на 2 группы: служилые слоинесли ту или иную форму гос службы и тяглое населениесодержали их платя налоги и исполняя повиности. Бояре занимали высшие гос должности обладали крупными вотчинами и поместьями. Существовало 2 периода в развитии русской госвенности 17в.