Содержание


Где лучшее место для жизни в США? Создайте приложение, чтобы узнать это!

Оценка альтернатив с использованием службы IBM Watson Tradeoff Analytics Service в Bluemix

Comments

IBM Bluemix™ предлагает различные службы для создания когнитивных приложений. Например, служба IBM Watson Tradeoff Analytics Service с помощью математических методов фильтрации позволяет определять оптимальные варианты по множеству критериев. Эта служба когнитивных вычислений позволяет специалистам принимать сложные решения, выбирая лучшие варианты. В руководстве демонстрируется использование службы IBM Watson Tradeoff Analytics Service для создания когнитивного приложения iDecide, которое рекомендует лучшее место для жизни в США.

Приложение iDecide

Приложение iDecide помогает в принятии решения, рано или поздно встающего перед всеми американцами — где лучше жить? Выбор может быть чрезвычайно сложным, поскольку необходимо учитывать множество зачастую противоречивых целей. Приложение iDecide, поддерживаемое службой IBM Watson Tradeoff Analytics, поможет пользователю принять оптимальное решение о том, в каком месте США ему лучше жить и работать, растить детей или поселиться после ухода на пенсию.

Приложение iDecide использует демографические данные, основывающиеся на результатах переписи населения США 2010 года, которые выложены в свободном доступе в Интернете. На основании этих данных служба Watson Tradeoff Analytics предоставляет пользователям основные альтернативы и визуальные средства анализа для поддержки принятия решений.

Это приложение — лишь один пример использования службы IBM Watson Tradeoff Analytics Service. Ее также можно применять в различных финансовых и коммерческих сценариях, таких как оценка страховых рисков, определение лучшей инвестиционной стратегии и выбор товаров в электронной коммерции.

Запустить приложениеПолучить код

Что нужно для создания приложения

Шаг 1. Добавление службы Tradeoff Analytics в приложение Bluemix

  1. Войдите в Bluemix под вашей учетной записью (или зарегистрируйтесь для бесплатного пробного использования).
  2. В окне Cloud Foundry Apps щелкните по CREATE APP.

     

    Cloud Foundry Apps box with the CREATE APP button
    Cloud Foundry Apps box with the CREATE APP button
  3. Выберите WEB как тип приложения.
  4. Выберите Liberty for Java — сверхлегкий профиль IBM WebSphere Application Server, предназначенный для облачных сред, и нажмите CONTINUE.

     

    IBM Bluemix catalog with Liberty for Java highlighted
    IBM Bluemix catalog with Liberty for Java highlighted
  5. На следующем экране щелкните по APP NAME, введите уникальное имя вашего нового приложения и нажмите Finish.

    Указанное вами имя становится URL-адресом маршрута для приложения.

    Приложение будет создано и подготовлено. Для подготовки нового приложения может потребоваться некоторое время.

  6. Щелкните по пункту Overview в левой навигационной панели вашего приложения. Под именем предложения будет показан его маршрут. Щелкните по кнопке ADD A SERVICE OR API.
  7. В области Services раздела Watson выберите службу Tradeoff Analytics.

     

    IBM Bluemix Catalog with the Tradeoff Analytics service highlighted
    IBM Bluemix Catalog with the Tradeoff Analytics service highlighted
  8. На экране Tradeoff Analytics по умолчанию появляется имя приложения. Оно связывает ваше приложение с именем службы Tradeoff Analytics Service. Нажмите кнопку CREATE.

    Предыдущие действия связали приложение со службой. На панели приложения отображаются среда исполнения Java для вашего приложения и связанная служба Tradeoff Analytics.

  9. В разделе Tradeoff Analytics щелкните по кнопке Show Credentials.

     

    Tradeoff Analytics service box with Show Credentials highlighted
    Tradeoff Analytics service box with Show Credentials highlighted

    Запишите значения полей URL, Username и Password. Позже эти учетные данные IBM Watson Tradeoff Analytics Service понадобятся для конфигурирования нового Java-приложения.

     

    Credentials of the IBM Watson Tradeoff Analytics Service
    Credentials of the IBM Watson Tradeoff Analytics Service

Шаг 2. Создание экземпляра приложения

  1. Перейдите к исходному коду и щелкните по кнопке FORK PROJECT, чтобы создать копию проекта.
  2. В ответ на приглашение укажите имя вашего нового проекта и нажмите CREATE, чтобы создать копию кода в вашем проекте и в репозитории Git.

Шаг 3. Соединение с проектом DevOps с помощью EGit в Eclipse

  1. На главной странице вашего проекта в IBM Bluemix DevOps Services в разделе Git скопируйте URL-адрес, указанный в поле Git Url.

     

    Edit Code dialog with the Git URL that you need to use.
    Edit Code dialog with the Git URL that you need to use.
  2. В Eclipse выберите File > Import.
  3. В окне Import выберите Git > Projects from Git и нажмите кнопку Next.
  4. Выберите Clone URI и нажмите Next.
  5. Вставьте скопированный URL Git в поле URI. В разделе Authentication введите идентификатор пользователя Jazz.net и пароль IBM ID. Нажмите кнопку Next.
  6. Выберите ветвь master и нажмите Next.

     

    Import Projects from Git dialog with the master branch selected
    Import Projects from Git dialog with the master branch selected
  7. При необходимости обновите раздел Local Destination клонированного репозитория и нажмите Next.
  8. Выберите Import as general project и нажмите Next.
  9. Нажмите кнопку Finish, чтобы завершить создание проекта в Eclipse.

Шаг 4. Разработка приложения в Eclipse

  1. В Eclipse щелкните правой кнопкой мыши по проекту и выберите Properties.
  2. В диалоговом окне Properties выберите Project Facets и отметьте Java и Dynamic Web Module.

     

    Properties dialog box with Java and Dynamic Web Module project facets selected
    Properties dialog box with Java and Dynamic Web Module project facets selected
  3. Нажмите кнопку Apply, затем кнопку OK.

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

    iDecide app files after a successful compile
  4. Измените приложение, указав в нем учетные данные IBM Watson Tradeoff Analytics Service, которые вы скопировали на шаге 1.
    1. Откройте каталог idecide2\src\com.watson.idecide.

       

      Eclipse project folders that show the location of the AnalyticsServlet.java file
    2. Отредактируйте файл AnalyticsServlet.java.
    3. Измените значения baseURL, username и password, указав данные, скопированные на этапе 1.

       

      Values for the baseURL, username, and password in the AnalyticsServlet.java file that must be updated.
      Values for the baseURL, username, and password in the AnalyticsServlet.java file that must be updated.
  5. Создайте проект приложения в Eclipse. Щелкните правой кнопкой мыши по проекту и выберите в меню Build Project.

    Убедитесь в том, что проект компилируется без ошибок.

  6. Разверните и запустите приложение на локальном сервере Tomcat, а затем протестируйте его.
    1. Щелкните правой кнопкой мыши по проекту и в меню выберите Run As > Run On Server.
    2. Выберите Tomcat v7.0 Server at localhost.

       

      Run on Server dialog box with Tomcat v7.0 Server selected
      Run on Server dialog box with Tomcat v7.0 Server selected
    3. Нажмите кнопку Next, а затем Finish.
    4. Протестируйте приложение.
  7. Экспортируйте WAR-файл приложения и сохраните его в каталог. Чтобы экспортировать WAR-файл, щелкните правой кнопкой мыши по проекту и выберите Export. Укажите параметры экспорта и нажмите Finish.

     

    Export dialog box
    Export dialog box

Следующим шагом является развертывание WAR-файла приложения в Bluemix с использованием инструментария командной строки Cloud Foundry (cf).

Шаг 5. Развертывание и выполнение приложения в Bluemix

Используя интерфейс командной строки, можно развертывать приложения в Bluemix (а также запускать, останавливать и администрировать приложения, выполняемые в Bluemix). Предварительно необходимо установить инструментарий Cloud Foundry CLI из GitHub.

  1. В интерфейсе Cloud Foundry CLI выполните команду cf login для авторизации в Bluemix по адресу https://api.ng.bluemix.net. В ответ на приглашение введите свой идентификатор IBM ID и пароль.
  2. Перенесите файлы приложения из локальной среды в выбранное приложение Bluemix. В интерфейсе Cloud Foundry CLI выполните команду cf push для переноса созданного WAR-файла из проекта Eclipse в Bluemix. В данном случае <application_name> — это уникальное имя вашего приложения, указанное на шаге 1.

    cf push <application_name> -p C:\idecide2.war

  3. Получив сообщение об успешном выполнении операции, откройте панель Bluemix.
  4. Проверьте новое приложение, щелкнув по отображаемой ссылке.

Для развертывания приложений в Bluemix и управления ими можно также использовать IBM Continuous Delivery Pipeline for Bluemix.

Шаг 6. Детальный обзор приложения iDecide

Web-приложение iDecide выполнено в виде мастера, включающего четыре этапа и набор из девяти вопросов, на которые пользователю необходимо ответить. Каждый вопрос привязан к входному критерию, который используется механизмом Tradeoff Analytics для выбора наилучших альтернатив. Наборы вопросов хранятся в формате JSON и загружаются динамически.

Приложение использует выборочные демографические данные, основывающиеся на результатах переписи населения США 2010 года. Эти данные охватывают 30 почтовых индексов США и также хранятся в приложении в формате JSON. В листинге 1 приведен пример строки JSON-файла с выборочными данными для округа Фэрфакс, штат Вирджиния (в этом листинге данные для удобства восприятия разбиты на строки).

Листинг 1. Выборочные демографические данные для округа Фэрфакс, штат Вирджиния
{"key":" 2",
"name":"Fairfax,VA-22030",
"values":{
"WhitePopulation":37042,
"HispanicPopulation":6546,
"AfAmPopulation":4772,
"AsianPopulation":12178,
"IncomePerHousehold":79659.0,
"CrimeIndex":49,
"IncomeBetween100Kto200K":0.35580,
"EducationBachelorOrGreater":0.58400,
"TotalNumberOfBusinesses":2392,
"AverageHouseValue":224100.0,
"FamilyHouseholds":0.666,
"FamilyHouseholdsWithChildrenUnder18":0.307,
"HouseholdsWithIndividuals65plus":0.185},
"description_html":"22030-Fairfax,VA"}

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

Теперь рассмотрим последовательность работы приложения:

  1. При запуске приложения открывается страница приветствия start.jsp с информацией о приложении. Затем пользователю предлагается страница questionnaire.jsp, которая считывает входящий JSON-файл и динамически воспроизводит вопросы для сбора ответов пользователя. Код JavaScript этой страницы включен в файл questionnaire.js. При загрузке страницы вызывается функция loadQuestionnaire. Эта функция извлекает questionnaire.json и вызывает DOM-функцию createQuestionnaire, которая создает необходимые HTML-элементы DOM.
    function onPageLoad() {
    		loadQuestionnaire();
    	  }
    	
    	  function loadQuestionnaire() {
    	    var path = 'problems/questionnaire.json';
    	    $.getJSON(path, function(data) {
    	    	createQuestionnaireDOM(data);
    	    });
    	  }
  2. Ответы пользователя отправляются в сервлет ProcessAnswersServlet.java. Этот сервлет вызывает метод updateGoals, который извлекает базовые демографические данные из файла iDecide.json и выполняет перебор массива столбцов критериев. Для каждого критерия соответствующий ответ пользователя задает новую цель. При отсутствии ответа пользователя сохраняется цель по умолчанию, определенная в iDecide.json. Затем обновленный объект JSON включается в сеанс для последующего использования.
    publicvoid updateGoals(HttpServletRequest request) {
    		JSONParser parser = new JSONParser();
    		try {
    			 String path = getServletContext().getRealPath("/problems");
    			 Object obj = parser.parse(new FileReader(path+"/iDecide.json"));
    		JSONObject jsonObject = (JSONObject) obj;
                 JSONArray columns = (JSONArray) jsonObject.get("columns");
                 String updatedColumns = "";
                 Iterator it = columns.iterator();
                 while (it.hasNext()) {
    	        	 JSONObject column = (JSONObject) it.next();
    	             String key = (String)column.get("key");
    	             System..println("key = "+key);
    	            
    	             boolean is_objective = (Boolean) column.get("is_objective");
    	             
    	             Enumeration<String> parameterNames = request.getParameterNames();
    	             while(parameterNames.hasMoreElements() && is_objective ) {
             			String param = parameterNames.nextElement();
             			if (param.equalsIgnoreCase(key)) {
             				column.put("goal",request.getParameter(param));
             				break;
             			}
    	             }
    	             updatedColumns = updatedColumns+column.toString();
                 }
                 request.getSession().setAttribute(, jsonObject);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
  3. Затем появляется промежуточная информационная страница thankyou.jsp, которая благодарит пользователя и предоставляет некоторые сведения о службе IBM Watson Tradeoff Analytics Service.
  4. Когда пользователь нажимает кнопку Continue, загружается последняя страница analytics.jsp. Эта JSP-страница использует два файла JavaScript — TradeoffAnalytics.js и analytics.js. Файл TradeoffAnalytics.js содержит среду JS для службы Tradeoff Analytics. Файл analytics.js загружает обертку API при загрузке страницы. В этом JS-файле настраиваются URL нашей службы и пути к сервлету загрузки данных.
    function onPageLoad() {
        loadTradeoffAnalytics('basic', 'watson', onPageReady, onError);
    }
    
    function loadTradeoffAnalytics(profile, themeName, callback, errCallback) {
        taClient = new TradeoffAnalytics({
          dilemmaServiceUrl: 'AnalyticsServlet',
          customCssUrl: 'https://ta-cdn.mybluemix.net/v1/modmt/styles/' + themeName + '.css',
          profile: profile,
          errCallback: errCallback
        }, 'taWidgetContainer');
    
        taClient.start(callback);
      }
  5. При загрузке страницы вызывается функция loadTradeoffAnalytics. Эта функция инициализирует API и задает AnalyticsServlet.java как dilemmaServiceUrl. После завершения инициализации API вызывается функция onPageReady, которая загружает данные для анализа с применением метода loadData. Метод loadData с помощью JSONServlet.java извлекает данные JSON с обновленными целями, сохраненные прежде в этом сеансе. Затем этот метод вызывает метод showTradeoffAnalytcsWidget для воспроизведения ответа службы Watson Tradeoff Analytics.
    function onPageReady() {
      	loadData();
      }
     
      function loadData() {
        var path = 'JSONServlet';
       
        $.getJSON(path, function(data) {
          problem = data;//JSON.stringify(data, null, 2);
          loadProfile('basic');
          loadTheme('watson');
          showTradeoffAnalytcsWidget(problem);
        });
      }
  6. AnalyticsServlet.java выполняет службу IBM Watson Tradeoff Analytics Service и предоставляет входные данные. Получаемый от Watson ответ выводится с использованием виджетов JS-среды Tradeoff Analytics. Виджет предоставляет среду для визуализации данных и помогает пользователю исследовать компромиссы в наборе альтернатив. На рисунке 1 показана диаграмма с выходными данными Watson Tradeoff Analytics.

     

    Рисунок 1. Визуализация выходных данных Watson Tradeoff Analytics
    Visual display of final output from Watson Tradeoff Analytics
    Visual display of final output from Watson Tradeoff Analytics

Заключение

В руководстве описывается создание когнитивного приложения, использующего службу IBM Watson Tradeoff Analytics Service. Хотя приведенный пример приложения демонстрирует использование Watson Tradeoff Analytics в процессе принятия решений, контекст приложения применим к множеству других бизнес-сценариев.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Когнитивное программированиеs
ArticleID=1029673
ArticleTitle=Где лучшее место для жизни в США? Создайте приложение, чтобы узнать это!
publish-date=04072016