Разработка прототипа экспертной системы формирования инвестиционного портфеля для клиента паевого инвестиционного фонда

Автор работы: Пользователь скрыл имя, 24 Июля 2014 в 18:53, курсовая работа

Краткое описание

При создании своих пользовательских экспертных систем на каком-нибудь языке высокого уровня программист сталкивается с тем, что разработка интерфейса программы, реализация ее системных функций требуют больших затрат времени, чем создание самого набора правил экспертной системы (ЭС). Для того чтобы разгрузить разработчика ЭС от такой работы, существуют специальные инструментальные средства (оболочки) экспертных систем. Такие инструментальные средства есть в ЭС MYCIN, GURU, LEONARDO, DENDRAL, 1stCLASS и др.

Содержание

Введение……………………………………………………………………………………………2
Техническое задание…………………………………………………………………………2
Характеристики ЭС……………………………………………………………………………..3
Тип инвестиционного портфеля………………………………………………………..4
Диаграммы…………………………………………………………………………………………5
Определение правил оценки типа портфеля………………………………….11
Тестовые примеры……………………………………………………………………………12
Код программы…………………………………………………………………………………20
Заключение………………………………………………………………………………………31
Список литературы…………………………………………………………………………..32

Прикрепленные файлы: 1 файл

Разработка прототипа экспертной системы формирования инвестиционного портфеля для клиента паевого инвестиционного фонда.doc

— 396.00 Кб (Скачать документ)

REASON: ВКЛАД

 

RULE: R2

PRIORITY: 100

COST: 100

IF: BUMAGI = 1

THEN: PORTFELEXIST = TRUE

PORTFEL-= { "ПОРТФЕЛЬ НЕИЗВЕСТЕН" cf 100 }

REASON: ЦЕННЫЕ БУМАГИ

 

RULE: R3

PRIORITY: 100

COST: 100

IF: BANK = 0

THEN: BUMAGI = 1

REASON: ЦЕННЫЕ БУМАГИ = 100

 

RULE: R4

PRIORITY: 100

COST: 100

IF: BUMAGI = 0

THEN: MONEY = 100

REASON: MONEY 100

 

RULE: R5

PRIORITY: 100

COST: 100

IF: MONEY = 100

THEN: PORTFELEXIST = TRUE

REASON: MONEY 100

 

RULE: R6

PRIORITY: 100

COST: 100

IF: BANK = 0

THEN: MONEY = 0

REASON: CB 100

 

RULE: R7

PRIORITY: 100

COST: 100

IF: MONEY = 0

THEN: PORTFELEXIST = TRUE

REASON: CB = 100

 

RULE: R8

PRIORITY: 90

COST: 100

IF: STAVKA = INFL

THEN: 

        PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 40 }

REASON: ВКЛАД=ИНФЛ1

 

RULE: R9

PRIORITY: 90

COST: 100

IF: STAVKA > INFL AND MONEY > 50

THEN: PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 80 };

        PORTFEL-= { "АГРЕССИВНЫЙ" cf 80 }

REASON: ВКЛАД>ИНФЛ1 

 

RULE: R10

PRIORITY: 90

COST: 100

IF: STAVKA < INFL AND MONEY > 50

THEN: PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 80 };

PORTFEL+= { "АГРЕССИВНЫЙ" cf 80 };

REASON: ВКЛАД<ИНФЛ1

 

 

 

 

RULE: R11

PRIORITY: 80

COST: 100

IF: BUMAGI = 1 and (AKC/(100-AKC-MONEY))>1 

THEN: PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 60};

        PORTFEL-= { "АГРЕССИВНЫЙ" cf 60}

        REASON:AKC > OBL

 

RULE: R12

PRIORITY: 80

COST: 100

IF: BUMAGI = 1 and (AKC/(100-AKC-MONEY))=1 

THEN: PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 50}

REASON:AKC = OBL

       

        RULE: R13

PRIORITY: 80

COST: 100

IF: BUMAGI = 1 and AKC<(100-AKC-MONEY) 

THEN: PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 60};

        PORTFEL+= { "АГРЕССИВНЫЙ" cf 60}

  REASON:AKC < OBL

       

       RULE: R14

PRIORITY: 60

COST: 100

IF: SIT = 0

THEN:  PORTFEL+= { "АГРЕССИВНЫЙ" cf 40 };

        PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 40}

               

REASON: КРИЗИС

 

RULE: R15

PRIORITY: 60

COST: 100

IF: SIT = 1

THEN: 

                PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 40 }

               REASON: СИТУАЦИЯ 1

 

 

RULE: R16

PRIORITY: 60

COST: 100

IF: SIT = 2

THEN: PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 40 };

                PORTFEL-= { "АГРЕССИВНЫЙ" cf 40}

               

REASON: СИТУАЦИЯ 2

 

 

RULE: R17

PRIORITY: 60

COST: 100

IF: RISK <20

THEN: PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 60 };

               

                PORTFEL-= { "АГРЕССИВНЫЙ" cf 60 }

               

REASON: Риск портфеля<20

 

RULE: R18

PRIORITY: 60

COST: 100

IF: RISK >20 and RISK <60

THEN: PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 60 }

               

               

REASON: 60>Риск портфеля>20

 

RULE: R19

PRIORITY: 60

COST: 100

IF: RISK >60

THEN: PORTFEL+= { "АГРЕССИВНЫЙ" cf 60 };

                PORTFEL-= { "СБАЛАНСИРОВАННЫЙ" cf 60 }

        REASON: Риск портфеля > 60

 

 

RULE: R20

PRIORITY: 60

COST: 100

IF: NONFARM < 6

 

THEN: PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 30 };

        PORTFEL-= { "АГРЕССИВНЫЙ" cf 30 }

REASON: NONFARM < 6

 

RULE: R21

PRIORITY: 60

COST: 100

IF: NONFARM > 6 AND NONFARM < 15

THEN: PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 35 }

       

REASON: NONFARM > 6 AND NONFARM < 15

 

 

 

RULE: R22

PRIORITY: 60

COST: 100

IF: NONFARM > 15

THEN: PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 30 };

       

        PORTFEL+= { "АГРЕССИВНЫЙ" cf 30 }

REASON: NONFARM > 15

 

RULE: R23

PRIORITY: 60

COST: 100

IF: SROK <2 AND PORTFELEXIST = TRUE

THEN: PORTFEL+= { "АГРЕССИВНЫЙ" cf 30 };

        PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 30 }

               

REASON: ДЛИТЕЛЬНОСТЬ портфеля<2 ЛЕТ

 

RULE: R24

PRIORITY: 60

COST: 100

IF: SROK >2 and SROK <5

THEN: P

        PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 30 }

REASON: ДЛИТЕЛЬНОСТЬ портфеля ОТ 2 ДО 5 ЛЕТ

 

RULE: R25

PRIORITY: 60

COST: 100

IF: SROK >5

THEN: PORTFEL-= { "АГРЕССИВНЫЙ" cf 20 };

        PORTFEL+= { "КОНСЕРВАТИВНЫЙ" cf 20 }

      

               

REASON: ДЛИТЕЛЬНОСТЬ портфеля БОЛЕЕ 5 ЛЕТ

 

 

 

 

 

RULE: R26

PRIORITY: 70

COST: 100

IF: NEFT < 40

THEN: PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 35 };

      

        PORTFEL+= { "АГРЕССИВНЫЙ" cf 35 }

REASON: NEFT < 40

 

RULE: R27

PRIORITY: 70

COST: 100

IF: NEFT < 70 AND NEFT > 40

THEN: 

        PORTFEL+= { "СБАЛАНСИРОВАННЫЙ" cf 40 }

       

REASON: NEFT < 70 AND NEFT > 40

 

RULE: R28

PRIORITY: 70

COST: 100

IF: NEFT > 70

THEN: PORTFEL-= { "КОНСЕРВАТИВНЫЙ" cf 40 };

        PORTFEL+= { "АГРЕССИВНЫЙ" cf 40 }

REASON: NEFT > 70

 

 

/*---------------------------------------------------------------------------*/

 

VAR: PORTFEL

TYPE: pp

LABEL: Сформированный Портфель

 

VAR: SIT

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=0;

let e.lnum=1;

IF PORTFELEXIST = TRUE

at  1,5 ?" ***************************************************************";

at  2,5 ?"         ЭКСПЕРТНАЯ СИСТЕМА ФОРМИРОВАНИЯ  ПОРТФЕЛЯ        ";

 

at  3,5 ?" ***************************************************************";

at  4,5 ?" В Данный Момент в  Стране Кризис                               - 0 ";

at  5,5 ?" Экономическая ситуация  в стране  средняя                      - 1 ";

at  6,5 ?" Экономическая ситуация в стране  устойчивая                   - 2 ";

at  7,5 ?" ***************************************************************";

at  8,5 input SIT num with "*** Введите цифру, соответствующую СИТУАЦИИ В СТРАНЕ >>>";

ENDIF

   e.lnum = 5

   e.deci = 1;

LABEL: Ситуация в стране

 

 

 

VAR: RISK

FIND: clear;

E.ICF = TRUE

        let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

              IF PORTFELEXIST = TRUE

   at 7,5 ?" *****  ВВЕДИТЕ ДОПУСТИМЫЙ РИСК ПОРТФЕЛЯ:";

   at 8,7 input RISK num with "     (ПРОЦЕНТОВ КАПИТАЛА) >>>";

              ENDIF

              E.ICF = FALSE

              e.lnum = 5

LABEL: СТЕПЕНЬ РИСКА ПОРТФЕЛЯ

 

 

VAR: NEFT

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

IF PORTFELEXIST = TRUE     

   at 7,5 ?" *****  ВВЕДИТЕ ЦЕНУ ЗА БАРЕЛЬ НЕФТИ:";

   at 8,7 input NEFT num with "     (У.Е) >>>";

   ENDIF

            

LABEL: ЦЕНА НА НЕФТЬ   

 

VAR: INFL

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

IF BANK = 1 

   at 7,5 ?" *****  ВВЕДИТЕ УРОВЕНЬ ИНФЛЯЦИИ:";

   at 8,7 input INFL num with "     (ПРОЦЕНТОВ) >>>";

ENDIF

LABEL: УРОВЕНЬ ИФЛЯЦИИ

  

 

 

 

 

 

 

VAR: BANK

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=0;

let e.lnum=1;

at  1,5 ?" ***************************************************************";

at  2,5 ?"         ЭКСПЕРТНАЯ СИСТЕМА ФОРМИРОВАНИЯ ПОРТФЕЛЯ        ";

 

at  3,5 ?" ***************************************************************";

at  4,5 ?"        ЕСТЬ  ЛИ У ВАС ВКЛАД В БАНКЕ ?        ";

 

at  5,5 ?" ***************************************************************";

at  6,5 ?" НЕТ                                - 0 ";

at  7,5 ?" ДА                                 - 1 ";

at  8,5 ?" ***************************************************************";

at  9,5 input BANK num with "*** Введите цифру, соответствующую ВКЛАДУ >>>";

 

   e.lnum = 5

   e.deci = 1;

LABEL: ДЕНЕЖНЫЕ СРЕДСТВА

  

VAR: MONEY

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

             IF BANK = 1 AND BUMAGI = 1

   at 7,5 ?" *****  ВВЕДИТЕ ПРОЦЕНТ ДЕНЕЖНЫХ СРЕДСТВ НА ДЕПОЗИТЕ В БАНКЕ:";

   at 8,7 input MONEY num with "     (ПРОЦЕНТОВ) >>>";

ENDIF

VAR: STAVKA

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

      IF BANK = 1       

   at 7,5 ?" *****  ВВЕДИТЕ БАНКОВСКУЮ  СТАВКУ ПРОЦЕНТОВ:";

   at 8,7 input STAVKA num with "     (ПРОЦЕНТОВ) >>>";

   ENDIF

            LABEL: СТАВКА ПРОЦЕНТОВ

 

VAR: SROK

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

         IF PORTFELEXIST = TRUE    

   at 7,5 ?" *****  ВВЕДИТЕ СРОК ДЕЙСТВИЯ ПОРТФЕЛЯ:";

   at 8,7 input SROK num with "     (ЛЕТ) >>>";

   ENDIF

  

        VAR: BUMAGI

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=0;

let e.lnum=1;

IF BANK =1

at  1,5 ?" ***************************************************************";

at  2,5 ?"        ЕСТЬ  ЛИ У ВАС ЦЕННЫЕ БУМАГИ ?        ";

 

at  3,5 ?" ***************************************************************";

at  4,5 ?" НЕТ                                - 0 ";

at  5,5 ?" ДА                                 - 1 ";

at  6,5 ?" ***************************************************************";

at  7,5 input BUMAGI num with "*** Введите цифру, соответствующую ВКЛАДУ >>>";

ENDIF

   e.lnum = 5

   e.deci = 1;

LABEL: ЦЕННЫЕ БУМАГИ

VAR: AKC

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

        IF      BUMAGI = 1 OR BANK = 0

   at 7,5 ?" *****  ВВЕДИТЕ ПРОЦЕНТ АКЦИЙ:";

   at 8,7 input AKC num with "     (ПРОЦЕНТОВ) >>>";

ENDIF

IF (MONEY+AKC)>100

THEN : AKC=(100-MONEY)

ENDIF

LABEL: ПРОЦЕТ АКЦИЙ

 

  VAR: NONFARM

FIND: clear;

let deci=e.deci;

let lnum=e.lnum;

let e.deci=1;

let e.lnum=4;

       IF PORTFELEXIST = TRUE      

   at 7,5 ?" *****  ВВЕДИТЕ УРОВЕНЬ БЕЗРАБОТИЦЫ:";

   at 8,7 input NONFARM num with "     (ПРОЦЕНТОВ) >>>";

         ENDIF    

              e.lnum = 5

LABEL: УРОВЕНЬ БЕЗРАБОТИЦЫ

 

 

 

 

 

 

END:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

- выводы по работе 

Данная ЭС является прототипом автономной ЭС, позволяющей давать субъективную оценку портфеля инвестора. При создании данной ЭС была использована и изучена теория нечетких множеств Заде, также была изучена среда GURU и структура машины логического вывода.

- Достоинства технологии :

  • Простота
  • Гибкость и универсальность
  • Отражение закономерностей обработки неопределенности человеком
  • Учет правдоподобия свидетельств

-Недостатки и ограничения :

  • Меньшая точность по сравнению с Байесовским подходом
  • Субъективность и эврестический характер оценок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список литературы.

  • «Интеллектуальные информационные технологии» А.И. Башмаков, И.А. Башмаков; Издательство МГТУ им. Н.Э. Баумана, 2005 год
  • «Интеллектуальные информационные технологии. Лекции» А.И. Башмаков

Информация о работе Разработка прототипа экспертной системы формирования инвестиционного портфеля для клиента паевого инвестиционного фонда