Применение языка Python при проектировании нечеткого контроллера

№ 8’2013
PDF версия
В статье рассматривается пример построения вычислителя на основе нечеткой логики и применение языка Python для написания интегрированной среды разработки.

Введение

В последнее время системы на основе нечеткой логики завоевывают все больше сторонников среди разработчиков систем управления.

Нечеткая логика — наиболее удобный способ построения систем управления сложными объектами и технологическими процессами. Она также нашла применение в бытовой электронике, диагностических и других экспертных системах. Несмотря на то, что математический аппарат нечеткой логики впервые был разработан в США, активное развитие этого метода началось в Японии, а сейчас волна интереса к этому методу вновь достигла США и Европы. В конце 1990-х годов в Японии появился широкий ассортимент «нечетких» бритв, пылесосов и фотокамер. Однако японские специалисты до сих пор занимаются этой темой, доказательством чего является все возрастающее количество патентов по нечеткой логике.

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

Для ряда задач электроэнергетики, решаемых в настоящее время, также возникает необходимость в применении вычислений на основе нечеткой логики. Примером применения нечеткой логики может служить построение системы защиты силового трансформатора [2]. Для решения поставленной задачи был разработан алгоритм защиты силового трансформатора на основе нечетких вычислений и формирования управляющих сигналов для исполнительных устройств системы защиты, а также спроектирована тестовая модель для проверки качества предложенного способа защиты.

Для удобства дальнейшего изложения введем следующие определения:

  • Микроконтроллер — микросхема, предназначенная для управления электронными устройствами. Микроконтроллер сочетает функции процессора и периферийных устройств, содержит ОЗУ и (или) ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи.
  • Контроллер — устройство на основе микропроцессора (микроконтроллера), служащее для управления технологическими процессами на производстве или для решения технологических задач автоматизированных систем управления. Контроллер собирает и обрабатывает данные с датчиков по программе, заданной пользователем, после чего выдает управляющие сигналы на исполнительные устройства.

Существующие нечеткие процессоры и микроконтроллеры

Некоторые производители элементной базы начали встраивать нечеткую логику непосредственно в процессоры. Так, в 1986 году компания AT&T Bell Labs начала создавать процессоры со встроенной нечеткой логикой обработки информации. В связи с популярностью и распространенностью традиционных микроконтроллеров в Европе и США ведутся интенсивные работы по интеграции нечетких команд в ассемблеры для программирования промышленных контроллеров (чипы Motorola 68HC11, 68HC12, 68HC21, Intel MCS96), а также разрабатываются различные варианты нечетких сопроцессоров, работающих совместно с центральным процессором по общей шине данных и помогающих в обработке информации и оптимизации использования правил (Siemens Nixdorf).

Некоторые существующие аппаратные нечеткие микроконтроллеры и процессоры:

  • ST52 Dualogic (STMicroelectronics) — семейство 8-битных микроконтроллеров, содержащих в одном корпусе традиционное вычислительное ядро, ядро для нечетких вычислений и периферийные схемы. Поддерживает специальный набор инструкций для работы с нечеткой логикой и позволяет определять несколько независимых наборов правил для нескольких различных алгоритмов.
  • ST62 (STMicroelectronics) — 8-битный микроконтроллер со встроенной, однократно программируемой памятью для автомобильной промышленности, продолжение семейства Dualogic. Имеет расширенный рабочий температурный диапазон (от -40 до +125 °C). Гарантированный срок хранения данных для памяти EPROM и EEPROM — не менее 20 лет.
  • 68HC12 (Motorola) — нечеткий микроконтроллер, базирующийся на ядре стандартного микроконтроллера 68HC11 и содержащий специальные функции для реализации нечеткой логики. Предназначен для использования с программным пакетом FuzzyTech и позволяет увеличить скорость выполнения приложений, созданных в этом пакете, до 15 раз и компактность кода до 6 раз по сравнению с реализацией на обычном ядре 68HC11.
  • VY86C570 (Togai InfraLogic) — нечеткий сопроцессор. 12-битное ядро FCA (Fuzzy Computational Acceleration, акселерация нечетких вычислений]), 4К×12 бит памяти OCTD (Observation, Conclusion & Temporary Data), память RB (Rule Base) и интерфейсная логика в одном корпусе.
  • SAE 81C99 (Siemens) — нечеткий процессор, способный выполнять восемь программируемых алгоритмов, обрабатывать 256 входных переменных и формировать до 64 выходных значений максимум по 16 384 правилам. Может использоваться как отдельное устройство или в качестве сопроцессора для 8- и 16-разрядных микроконтроллеров. Скорость работы — 10 млн правил в секунду.

Помимо аппаратных решений, сейчас существуют такие системы моделирования, как MATLAB и LabVIEW, в которых есть программные модули для проектирования и моделирования контроллеров на основе нечетких вычислений.

Становится ясно, что имеется возможность построения систем нечеткого управления на основе простого и дешевого нечеткого контроллера, который бы с легкостью интегрировался в более крупную систему, и написания для него интегрированной среды разработки (integrated development environment, IDE).

Основы нечеткой логики

Рассмотрим основные понятия нечеткой логики и алгоритмы нечеткого логического вывода.

Нечеткая логика — это раздел математики, являющийся обобщением классической логики и теории множеств. Понятие нечеткой логики было впервые введено профессором Лотфи Заде в 1965 году. Понятие множества было расширено допущением, что функция принадлежности элемента к множеству может принимать любые значения в интервале [0…1], а не только 0 или 1. Такие множества были названы нечеткими.

Теория нечетких множеств — это расширение классической теории множеств и используется в нечеткой логике. Ее также разработал Лотфи Заде.

В классической теории принадлежность элементов множеству оценивается в бинарных терминах в соответствии с четким условием: элемент принадлежит либо нет данному множеству. Напротив, теория нечетких множеств разрешает градуированную оценку отношения принадлежности элементов множеству, то есть это отношение описывается при помощи функции принадлежности μ→[0,1].

Нечеткие множества — это расширение классической теории множеств, поскольку на некотором множестве функция принадлежности может действовать так же, как индикаторная функция, отображая все элементы либо в 1, либо в 0, как в классическом варианте.

Нечеткое множество на классическом множестве X определяется как:

Формула

Функция принадлежности μA(x) количественно градуирует принадлежность элементов x фундаментальному множеству X. Отображение элемента в значении 0 означает, что элемент не принадлежит данному множеству, значение 1 соответствует полной принадлежности элемента множеству. Значения, лежащие строго между 0 и 1, характеризуют «нечеткие» элементы.

На рис. 1 черным цветом показано множество X, а синим — нечеткое множество А̃. Вид функции принадлежности может быть абсолютно произвольным. В последнее время сформировалось понятие о так называемых стандартных функциях принадлежности (рис. 2).

Нечеткое множество и четкое классическое множество

Рис. 1. Нечеткое множество и четкое классическое множество

 

Виды стандартных функций принадлежности

Рис. 2. Виды стандартных функций принадлежности

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

α-отсечением (или множеством α-уровня) нечеткого множества А̃ называется четкое подмножество универсального множества U, элементы которого имеют степени принадлежности, большие или равные α: Aa = {u: μA(u) ≥ α}, α∈ [0,1]. Значение α называют α-уровнем.

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

Существуют такие методы дефаззификации, как:

  • Centroid — центр тяжести;
  • LOM (Largest Of Maximums) — наибольший из максимумов;
  • SOM (Smallest Of Maximums) — наименьший из максимумов;
  • MOM (Mean Of Maximums) — центр максимумов.

Дефаззификация нечеткого множества по методу центра тяжести осуществляется по формуле:

Формула

Физическим аналогом этой формулы является нахождение центра тяжести плоской фигуры, ограниченной осями координат и графиком функции принадлежности нечеткого множества. В случае дискретного универсального множества дефаззификация нечеткого множества по методу центра тяжести осуществляется по формуле:

Формула

Дефаззификация нечеткого множества по методу центра максимумов осуществляется по формуле:

Формула

где G — множество всех элементов из интервала [x0, xk], имеющих максимальную степень принадлежности нечеткому множеству.

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

Формула

где |G| — мощность множества G.

В дискретном случае дефаззификация по методам наибольшего и наименьшего из максимумов осуществляется по формулам y = max(G) и y = min(G) соответственно. Согласно последним трем формулам ясно, что если функция принадлежности имеет только один максимум, то его координата и является четким аналогом нечеткого множества. Графически методы дефаззификации представлены на рис. 3.

Методы дефаззификации

Рис. 3. Методы дефаззификации

Нечеткой базой знаний называется совокупность логических высказываний типа: если x1 есть A И (ИЛИ) x2 есть B И (ИЛИ) … xnесть С, то y есть Z, где A, B, C, Z — заданные функции принадлежности для переменных x1, x2, xn, у.

Если использована связка И, применяется операция min. Если же посылки объединены связкой ИЛИ, необходимо применить операцию max.

Нечетким логическим выводом называется аппроксимация зависимости с помощью нечеткой базы знаний и операций над нечеткими множествами.

Операции с нечеткими множествами

Определим базовые операции (действия) над нечеткими множествами. Аналогично действиям с обычными множествами определим пересечение, объединение и отрицание нечетких множеств. В своей работе по нечетким множествам Лотфи Заде предложил оператор минимума для пересечения и оператор максимума для объединения двух нечетких множеств. Легко понять, что эти операторы совпадают с обычными (четкими) объединением и пересечением, только рассматриваются степени принадлежности 0 и 1. Чтобы пояснить это, рассмотрим пример.

Пусть A — нечеткий интервал от 5 до 8 и B — нечеткое число около 4, как показано на рис. 4.

Исходные данные

Рис. 4. Исходные данные

Проиллюстрируем операцию пересечения нечетких множеств (синяя линия на рис. 5а), вычисляемого по формуле:

Формула

Проиллюстрируем операцию объединения нечетких множеств (синяя линия на рис. 5б), вычисляемого по формуле:

Формула

Проиллюстрируем операцию отрицания нечеткого множества, вычисляемого по формуле (синяя линия на рис. 5в):

Формула
Нечеткие множества

Рис. 5. Нечеткие множества: а) пересечение; б) объединение; в) отрицание

Далее рассмотрим основные алгоритмы нечеткого вывода [1].

Алгоритм Мамдани

Предположим, что система описывается следующими правилами:

  • если x есть A1 И у есть B1, то z есть C1;
  • если x есть A2 И у есть B2, то z есть C2,

    где x и у — входные переменные; z — выходная переменная; A1, A2, B1, B2, C1, C2 — заданные функции принадлежности.

На первом этапе находят степени принадлежности для каждого правила: A1(x0), B1(x0), A2(y0), B2(y0).

На втором этапе находят α-уровни для каждого из правил по формулам:

Формула

Затем находят усеченные функции принадлежности правил по формулам:

Формула

На третьем этапе производят объединение найденных усеченных функций, что приводит к получению итогового нечеткого подмножества для выходной переменной с функцией принадлежности по формуле:

Формула

На четвертом этапе проводят операцию дефаззификации, например по методу центра тяжести.

Работа алгоритма показана на рис. 6. Для большей наглядности на рисунке приведен пример для трех нечетких правил.

Работа алгоритма Мамдани

Рис. 6. Работа алгоритма Мамдани

Алгоритм Такаги-Сугэно

Этот алгоритм использует набор правил в следующей форме (для примера приведем два правила):

  • если x есть A1 И y есть B1, то z = a1x+b1y,
  • если x есть A2 И y есть B2, то z = a2x+b2y
  • .

Особенностью алгоритма является то, что в качестве функций принадлежности выходной переменной используются полиномы, обычно это полиномы нулевого и первого порядка. В таких случаях используют названия «алгоритм Такаги-Сугэно» нулевого и первого порядка соответственно.

В алгоритме Такаги-Сугэно нулевого порядка (называемом также упрощенным алгоритмом нечеткого вывода) правила имеют вид: если x1 есть A1 и x2 есть A2… и xn есть An, то z = с, где с = const.

Отметим, что алгоритм Такаги-Сугэно нулевого порядка можно интерпретировать как частный случай алгоритма Мамдани, когда функции принадлежности заключений правил имеют вид:

Формула

Алгоритм состоит из следующих шагов:

  • На первом шаге так же, как и в алгоритме Мамдани, находят степени принадлежности для каждого нечеткого правила.
  • На втором шаге вычисляют α-уровни для каждого из правил по формулам (9) и (10), а также индивидуальные выходы правил по формулам:
    Формула
  • На третьем шаге вычисляют четкое значение выходной переменной по формуле:
    Формула

Работа алгоритма показана на рис. 7.

Работа алгоритма Такаги-Сугэно

Рис. 7. Работа алгоритма Такаги-Сугэно

Вариант построения нечеткого контроллера

Описываемый вариант нечеткого контроллера построен на базе ПЛИС EP3C25E144C8 фирмы Altera и микроконтроллера ARM Cortex-M4 фирмы STMicroelectronics. Микроконтроллер сопряжен с ПЛИС через интерфейс внешней памяти. Непосредственно вычислением алгоритмов нечеткой логики занимается ПЛИС. Микроконтроллер работает под управлением операционной системы реального времени (real-time operating system, RTOS). В ядро RTOS интегрированы функции для работы с нечетким контроллером. Таким образом, ПЛИС по отношению к микроконтроллеру является сопроцессором. Структурная схема нечеткого контроллера представлена на рис. 8.

Схема нечеткого контроллера

Рис. 8. Структурная схема нечеткого контроллера

Богатая периферия микроконтроллера позволяет непосредственно подключать к нему датчики и управляющие устройства с различными цифровыми интерфейсами. Также в состав микроконтроллера входит многоканальный аналого-цифровой преобразователь (АЦП) и 2-канальный цифро-аналоговый преобразователь (ЦАП), поэтому ARM Cortex-M4 можно легко интегрировать в контур управления автоматизированной системы. RTOS значительно облегчает разработку программной части, так как все основные функции управления периферией и нечетким контроллером уже реализованы в ядре операционной системы. Поэтому можно сосредоточиться непосредственно на решении поставленной задачи.

В описываемом нечетком контроллере используется RTOS собственной разработки, но это не означает, что применение какой-либо стандартной RTOS невозможно. Ничто не мешает использовать такие общеизвестные операционные системы, как FreeRTOS, scmRTOS, ECOS и т. д.

Нечеткий сопроцессор, реализованный на ПЛИС, имеет следующие характеристики:

  • Число входов — 4.
  • Число выходов — 1.
  • Разрядность входных и выходных данных — 9 бит.
  • Объем базы правил — 256 правил.
  • Поддерживается два типа контроллеров: Мамдани и Такаги-Сугэно нулевого порядка.
  • Методы дефаззификации: Centroid, LOM, SOM, MOM.

Структурная схема нечеткого сопроцессора приведена на рис. 9.

Схема нечеткого сопроцессора

Рис. 9. Структурная схема нечеткого сопроцессора

Интегрированная среда разработки для этого нечеткого контроллера была написана на языке Python.

Python — активно развивающийся язык программирования. Богатая стандартная библиотека является одной из его привлекательных сторон. Здесь имеются средства для работы со многими сетевыми протоколами и форматами Интернета, например модули для написания HTTP-серверов и клиентов, разборки и создания почтовых сообщений, работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кросс-платформенные приложения. Существуют модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, для сериализации данных, поддержки юнит-тестирования и др.

Помимо стандартной библиотеки, существует множество библиотек, предоставляющих интерфейс ко всем системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы Win32 API, а также COM, в объеме не меньшем, чем у Visual Basic или Delphi. Количество прикладных библиотек для Python в разных областях без преувеличения огромно (веб, базы данных, обработка изображений и текста, численные методы, приложения операционной системы и т. д.).

Библиотека NumPy для работы с многомерными массивами позволяет достичь производительности научных расчетов, сравнимой со специализированными пакетами. SciPy использует NumPy и предоставляет доступ к обширному спектру математических алгоритмов (матричная алгебра — BLAS уровней 1-3, LAPACK, БПФ и т. п.). Numarray специально разработан для операций с большими объемами научных данных.

Python предоставляет простой и удобный программный интерфейс C API для написания собственных модулей на языках Си и C++. Такой инструмент, как SWIG, позволяет почти автоматически получать привязки для использования C/C++ библиотек в коде на этом языке. Возможности этого и других инструментов варьируются от автоматической генерации (C/C++/Fortran)-Python интерфейсов по специальным файлам (SWIG, pyste, SIP, pyfort) до предоставления более удобных API (boost::python, CXX и др.). Инструмент стандартной библиотеки ctypes позволяет программам Python напрямую обращаться к динамическим библиотекам/DLL, написанным на Си. Существуют модули, позволяющие встраивать код на С/C++ прямо в исходные файлы Python, создавая расширения «на лету».

С Python поставляется библиотека tkinter на основе Tcl/Tk для создания кросс-платформенных программ с графическим интерфейсом.

Существуют расширения, позволяющие использовать все основные GUI библиотеки, — wxPython, основанное на библиотеке wxWidgets, PyGTK для Gtk, PyQt и PySide для Qt и др. Некоторые из них также предоставляют широкие возможности по работе с базами данных, графикой и сетями, используя все возможности библиотеки, на которой они основаны.

Для создания игр и приложений, требующих нестандартного интерфейса, можно использовать библиотеку Pygame. Она также имеет обширные средства работы с мультимедиа: с ее помощью можно управлять звуком и изображениями, воспроизводить видео [3, 4].

Итак, Python позволяет с гораздо меньшими затратами труда и времени разрабатывать IDE, быстро создавать как прототипы программных систем, так и сами программные системы, помогает в интеграции программного обеспечения для решения производственных задач. Python свободно доступен для многих платформ, а написанные на нем программы обычно переносятся между платформами без изменений. Это обстоятельство позволяет применять любую имеющуюся аппаратную платформу.

Для написания данной IDE помимо стандартной библиотеки Python использовалась графическая библиотека tkinter на основе Tcl/Tk и Pmw. Общий вид интерфейса представлен на рис. 10.

Общий вид интерфейса IDE

Рис. 10. Общий вид интерфейса IDE

Результатом работы IDE является создание трех файлов, в которых содержатся функции для конфигурирования нечеткого контроллера и работы с ним на языке Си. Эти три файла можно непосредственно встраивать в рабочий проект. Стоит отметить тот факт, что функции обмена данными с ПЛИС являются аппаратно зависимыми и определяются типом микроконтроллера. Эти функции встраиваются в ядро RTOS, что упрощает их дальнейшее использование в рабочем проекте.

Теперь рассмотрим процесс программирования нечеткого контроллера на примере упомянутой выше задачи [2]. Сделаем проект в IDE для нечеткого сопроцессора:

    • На первом этапе создаем проект и выбираем тип контроллера (рис. 11).
      Пример создания проекта

      Рис. 11. Пример создания проекта

    • Далее формируем функции принадлежности входных сигналов (рис. 12).
Пример формирования функций принадлежности входных сигналов

Рис. 12. Пример формирования функций принадлежности входных сигналов

  • Формируем функции принадлежности выходного сигнала и выбираем метод дефаззификации (рис. 13).
    Пример установки параметров для выходной переменной

    Рис. 13. Пример установки параметров для выходной переменной

  • После этого формируем базу правил (рис. 14).
    Пример формирования базы правил

    Рис. 14. Пример формирования базы правил

  • Затем проверяем проект на ошибки (рис. 15).
    Завершающая стадия работы с проектом

    Рис. 15. Завершающая стадия работы с проектом

Если в проекте не обнаружено ошибок, то формируются файлы с Си-кодом, в которых содержатся функции для конфигурирования нечеткого сопроцессора и управления им:

  • fuzzy_core_functions.h — содержит прототипы функций конфигурирования нечеткого сопроцессора и макросы.
  • fuzzy_core_functions.c — содержит функции конфигурирования нечеткого сопроцессора.
  • fuzzy_controller.c — содержит функции управления нечетким сопроцессором.

Дальнейшие действия сводятся к тому, что эти файлы копируются в папку с проектом для микроконтроллера, а именно в подпапку с исходными кодами ядра RTOS. Конфигурирование нечеткого сопроцессора происходит при старте ядра RTOS совместно с остальной периферией микроконтроллера.

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

Пример вызова функций работы с нечетким сопроцессором

Листинг. Пример вызова функций работы с нечетким сопроцессором

Заключение

Судя по приведенному примеру построения нечеткого контроллера, применение RTOS и языка Python позволяет создавать системы различного назначения. Такое свойство языка Python, как кросс-платформенность, расширяет возможности его применения. Используя возможности языка Python и таких мощных систем моделирования, как MATLAB, можно эффективно проектировать и моделировать сложные системы.

Литература

  1. Круглов В. В., Дли М. И., Годунов Р. Ю. Нечеткая логика и искусственные нейронные сети. М.: Физматлит, 2001.
  2. Шин М., Парк Ч., Ким Й. Защита силового трансформатора на основе нечеткой логики // Релейщик. 2012. № 2.
  3. http://ru.wikipedia.org/wiki/Python
  4. www.python.org
xosotin chelseathông tin chuyển nhượngcâu lạc bộ bóng đá arsenalbóng đá atalantabundesligacầu thủ haalandUEFAevertonxosofutebol ao vivofutemaxmulticanaisonbetbóng đá world cupbóng đá inter milantin juventusbenzemala ligaclb leicester cityMUman citymessi lionelsalahnapolineymarpsgronaldoserie atottenhamvalenciaAS ROMALeverkusenac milanmbappenapolinewcastleaston villaliverpoolfa cupreal madridpremier leagueAjaxbao bong da247EPLbarcelonabournemouthaff cupasean footballbên lề sân cỏbáo bóng đá mớibóng đá cúp thế giớitin bóng đá ViệtUEFAbáo bóng đá việt namHuyền thoại bóng đágiải ngoại hạng anhSeagametap chi bong da the gioitin bong da lutrận đấu hôm nayviệt nam bóng đátin nong bong daBóng đá nữthể thao 7m24h bóng đábóng đá hôm naythe thao ngoai hang anhtin nhanh bóng đáphòng thay đồ bóng đábóng đá phủikèo nhà cái onbetbóng đá lu 2thông tin phòng thay đồthe thao vuaapp đánh lô đềdudoanxosoxổ số giải đặc biệthôm nay xổ sốkèo đẹp hôm nayketquaxosokq xskqxsmnsoi cầu ba miềnsoi cau thong kesxkt hôm naythế giới xổ sốxổ số 24hxo.soxoso3mienxo so ba mienxoso dac bietxosodientoanxổ số dự đoánvé số chiều xổxoso ket quaxosokienthietxoso kq hôm nayxoso ktxổ số megaxổ số mới nhất hôm nayxoso truc tiepxoso ViệtSX3MIENxs dự đoánxs mien bac hom nayxs miên namxsmientrungxsmn thu 7con số may mắn hôm nayKQXS 3 miền Bắc Trung Nam Nhanhdự đoán xổ số 3 miềndò vé sốdu doan xo so hom nayket qua xo xoket qua xo so.vntrúng thưởng xo sokq xoso trực tiếpket qua xskqxs 247số miền nams0x0 mienbacxosobamien hôm naysố đẹp hôm naysố đẹp trực tuyếnnuôi số đẹpxo so hom quaxoso ketquaxstruc tiep hom nayxổ số kiến thiết trực tiếpxổ số kq hôm nayso xo kq trực tuyenkết quả xổ số miền bắc trực tiếpxo so miền namxổ số miền nam trực tiếptrực tiếp xổ số hôm nayket wa xsKQ XOSOxoso onlinexo so truc tiep hom nayxsttso mien bac trong ngàyKQXS3Msố so mien bacdu doan xo so onlinedu doan cau loxổ số kenokqxs vnKQXOSOKQXS hôm naytrực tiếp kết quả xổ số ba miềncap lo dep nhat hom naysoi cầu chuẩn hôm nayso ket qua xo soXem kết quả xổ số nhanh nhấtSX3MIENXSMB chủ nhậtKQXSMNkết quả mở giải trực tuyếnGiờ vàng chốt số OnlineĐánh Đề Con Gìdò số miền namdò vé số hôm nayso mo so debach thủ lô đẹp nhất hôm naycầu đề hôm naykết quả xổ số kiến thiết toàn quốccau dep 88xsmb rong bach kimket qua xs 2023dự đoán xổ số hàng ngàyBạch thủ đề miền BắcSoi Cầu MB thần tàisoi cau vip 247soi cầu tốtsoi cầu miễn phísoi cau mb vipxsmb hom nayxs vietlottxsmn hôm naycầu lô đẹpthống kê lô kép xổ số miền Bắcquay thử xsmnxổ số thần tàiQuay thử XSMTxổ số chiều nayxo so mien nam hom nayweb đánh lô đề trực tuyến uy tínKQXS hôm nayxsmb ngày hôm nayXSMT chủ nhậtxổ số Power 6/55KQXS A trúng roycao thủ chốt sốbảng xổ số đặc biệtsoi cầu 247 vipsoi cầu wap 666Soi cầu miễn phí 888 VIPSoi Cau Chuan MBđộc thủ desố miền bắcthần tài cho sốKết quả xổ số thần tàiXem trực tiếp xổ sốXIN SỐ THẦN TÀI THỔ ĐỊACầu lô số đẹplô đẹp vip 24hsoi cầu miễn phí 888xổ số kiến thiết chiều nayXSMN thứ 7 hàng tuầnKết quả Xổ số Hồ Chí Minhnhà cái xổ số Việt NamXổ Số Đại PhátXổ số mới nhất Hôm Nayso xo mb hom nayxxmb88quay thu mbXo so Minh ChinhXS Minh Ngọc trực tiếp hôm nayXSMN 88XSTDxs than taixổ số UY TIN NHẤTxs vietlott 88SOI CẦU SIÊU CHUẨNSoiCauVietlô đẹp hôm nay vipket qua so xo hom naykqxsmb 30 ngàydự đoán xổ số 3 miềnSoi cầu 3 càng chuẩn xácbạch thủ lônuoi lo chuanbắt lô chuẩn theo ngàykq xo-solô 3 càngnuôi lô đề siêu vipcầu Lô Xiên XSMBđề về bao nhiêuSoi cầu x3xổ số kiến thiết ngày hôm nayquay thử xsmttruc tiep kết quả sxmntrực tiếp miền bắckết quả xổ số chấm vnbảng xs đặc biệt năm 2023soi cau xsmbxổ số hà nội hôm naysxmtxsmt hôm nayxs truc tiep mbketqua xo so onlinekqxs onlinexo số hôm nayXS3MTin xs hôm nayxsmn thu2XSMN hom nayxổ số miền bắc trực tiếp hôm naySO XOxsmbsxmn hôm nay188betlink188 xo sosoi cầu vip 88lô tô việtsoi lô việtXS247xs ba miềnchốt lô đẹp nhất hôm naychốt số xsmbCHƠI LÔ TÔsoi cau mn hom naychốt lô chuẩndu doan sxmtdự đoán xổ số onlinerồng bạch kim chốt 3 càng miễn phí hôm naythống kê lô gan miền bắcdàn đề lôCầu Kèo Đặc Biệtchốt cầu may mắnkết quả xổ số miền bắc hômSoi cầu vàng 777thẻ bài onlinedu doan mn 888soi cầu miền nam vipsoi cầu mt vipdàn de hôm nay7 cao thủ chốt sốsoi cau mien phi 7777 cao thủ chốt số nức tiếng3 càng miền bắcrồng bạch kim 777dàn de bất bạion newsddxsmn188betw88w88789bettf88sin88suvipsunwintf88five8812betsv88vn88Top 10 nhà cái uy tínsky88iwinlucky88nhacaisin88oxbetm88vn88w88789betiwinf8betrio66rio66lucky88oxbetvn88188bet789betMay-88five88one88sin88bk88xbetoxbetMU88188BETSV88RIO66ONBET88188betM88M88SV88Jun-68Jun-88one88iwinv9betw388OXBETw388w388onbetonbetonbetonbet88onbet88onbet88onbet88onbetonbetonbetonbetqh88mu88Nhà cái uy tínpog79vp777vp777vipbetvipbetuk88uk88typhu88typhu88tk88tk88sm66sm66me88me888live8live8livesm66me88win798livesm66me88win79pog79pog79vp777vp777uk88uk88tk88tk88luck8luck8kingbet86kingbet86k188k188hr99hr99123b8xbetvnvipbetsv66zbettaisunwin-vntyphu88vn138vwinvwinvi68ee881xbetrio66zbetvn138i9betvipfi88clubcf68onbet88ee88typhu88onbetonbetkhuyenmai12bet-moblie12betmoblietaimienphi247vi68clupcf68clupvipbeti9betqh88onb123onbefsoi cầunổ hũbắn cáđá gàđá gàgame bàicasinosoi cầuxóc đĩagame bàigiải mã giấc mơbầu cuaslot gamecasinonổ hủdàn đềBắn cácasinodàn đềnổ hũtài xỉuslot gamecasinobắn cáđá gàgame bàithể thaogame bàisoi cầukqsssoi cầucờ tướngbắn cágame bàixóc đĩaAG百家乐AG百家乐AG真人AG真人爱游戏华体会华体会im体育kok体育开云体育开云体育开云体育乐鱼体育乐鱼体育欧宝体育ob体育亚博体育亚博体育亚博体育亚博体育亚博体育亚博体育开云体育开云体育棋牌棋牌沙巴体育买球平台新葡京娱乐开云体育mu88qh88

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *