{ "cells": [ { "cell_type": "markdown", "id": "64acd2ee-c69e-46db-98eb-91d1726bbdf2", "metadata": {}, "source": [ "# Manual Expert Example" ] }, { "cell_type": "code", "execution_count": 1, "id": "e26e457a-a149-4aeb-a597-155d29bd7d1f", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You need to evaluate 6 characteristic objects.\n", "It will require 15 pairwise comparisons.\n", "\n", "Characteristic Objects to be evaluated:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "=================================== 1 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"B\" if B is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 3 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 5 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"E\" if E is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> E\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 7 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 9 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 10 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 11 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 12 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 13 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 14 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 15 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "Resulted MEJ:\n", "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ 0 │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ 0 │ 0 │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ 0 │ 0 │ 0 │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ 0 │ 0 │ 0 │ 0 │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ 0 │ 0 │ 0 │ 0 │ 0 │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 3 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 5 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"E\" if E is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> E\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 7 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 9 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 10 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 11 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 12 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 13 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 14 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "================================== 15 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "Resulted MEJ:\n", "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ 0 │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ 0 │ 0 │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ 0 │ 0 │ 0 │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ 0 │ 0 │ 0 │ 0 │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ 0 │ 0 │ 0 │ 0 │ 0 │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "\n", "Identified MEJ was written to \"mej.csv\".\n" ] } ], "source": [ "import numpy as np\n", "\n", "from pymcdm.methods import COMET\n", "from pymcdm.methods.comet_tools import ManualExpert\n", "\n", "# Define characteristic values for two criteria.\n", "cvalues = [\n", " [0, 500, 1000],\n", " [1, 5]\n", " ]\n", "\n", "# Define expert function as ManualExpert object, which will prompt you to\n", "# answer some pairwise comparison questions to copmare characteristic objects.\n", "expert_function = ManualExpert(\n", " criteria_names=['Price [$]', 'Profit [grade]'],\n", " show_MEJ=True,\n", " filename=None\n", " )\n", "\n", "# Creation of the COMET object will start model identification (see output below).\n", "comet = COMET(cvalues, expert_function)" ] }, { "cell_type": "markdown", "id": "2d34cc0c-709e-42e2-9125-852cd6856546", "metadata": {}, "source": [ "# Triad Supported Expert Example" ] }, { "cell_type": "code", "execution_count": 2, "id": "7fe38ba3-ab2f-42c3-bc1a-55f45e15919d", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You need to evaluate 6 characteristic objects.\n", "It will require 15 pairwise comparisons.\n", "\n", "Characteristic Objects to be evaluated:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "ATTENTION: This expert function use full triad support to speed up identification of the MEJ matrix by expert. Please, be aware that full triad support assumes that answers of the expert are always is consistent and in transition relation. Please review resulted MEJ in the end and correct it if needed.\n", "\n", "=================================== 1 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ A │ 0 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"A\" if A is better.\n", "Input \"B\" if B is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > C\n", "Therefore:\n", "A > C i.e. mej[A][C] = 1.0\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > D\n", "Therefore:\n", "B > D i.e. mej[B][D] = 1.0\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Triad support:\n", "C > D and D > E\n", "Therefore:\n", "C > E i.e. mej[C][E] = 1.0\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"E\" if E is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ ">>> E\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Triad support:\n", "D > E and E > F\n", "Therefore:\n", "D > F i.e. mej[D][F] = 1.0\n", "\n", "=================================== 9 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > D\n", "Therefore:\n", "A > D i.e. mej[A][D] = 1.0\n", "\n", "================================== 10 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > E\n", "Therefore:\n", "B > E i.e. mej[B][E] = 1.0\n", "\n", "================================== 11 / 15 =====================================\n", "\n", "Triad support:\n", "C > D and D > F\n", "Therefore:\n", "C > F i.e. mej[C][F] = 1.0\n", "\n", "================================== 12 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > E\n", "Therefore:\n", "A > E i.e. mej[A][E] = 1.0\n", "\n", "================================== 13 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > F\n", "Therefore:\n", "B > F i.e. mej[B][F] = 1.0\n", "\n", "================================== 14 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > F\n", "Therefore:\n", "A > F i.e. mej[A][F] = 1.0\n", "\n", "Resulted MEJ:\n", "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ 0 │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ 0 │ 0 │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ 0 │ 0 │ 0 │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ 0 │ 0 │ 0 │ 0 │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ 0 │ 0 │ 0 │ 0 │ 0 │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "\n", "Answered by the expert: 5\n", "Completed by the triads: 10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> A\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ B │ 0 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"B\" if B is better.\n", "Input \"C\" if C is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> B\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 2 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > C\n", "Therefore:\n", "A > C i.e. mej[A][C] = 1.0\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ C │ 500 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"C\" if C is better.\n", "Input \"D\" if D is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> C\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 4 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > D\n", "Therefore:\n", "B > D i.e. mej[B][D] = 1.0\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ D │ 500 │ 5 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"D\" if D is better.\n", "Input \"E\" if E is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> D\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 6 / 15 =====================================\n", "\n", "Triad support:\n", "C > D and D > E\n", "Therefore:\n", "C > E i.e. mej[C][E] = 1.0\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Evaluate following characteristic objects:\n", "┌─────┬─────────────┬──────────────────┐\n", "│ │ Price [$] │ Profit [grade] │\n", "├─────┼─────────────┼──────────────────┤\n", "│ E │ 1000 │ 1 │\n", "├─────┼─────────────┼──────────────────┤\n", "│ F │ 1000 │ 5 │\n", "└─────┴─────────────┴──────────────────┘\n", "\n", "Input \"E\" if E is better.\n", "Input \"F\" if F is better\n", "Leave empty for the tie.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ ">>> E\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ │ 1/2 │ 1 │ 1 │ │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ │ │ 1/2 │ 1 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ │ │ │ 1/2 │ 1 │ │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ │ │ │ │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ │ │ │ │ │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "=================================== 8 / 15 =====================================\n", "\n", "Triad support:\n", "D > E and E > F\n", "Therefore:\n", "D > F i.e. mej[D][F] = 1.0\n", "\n", "=================================== 9 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > D\n", "Therefore:\n", "A > D i.e. mej[A][D] = 1.0\n", "\n", "================================== 10 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > E\n", "Therefore:\n", "B > E i.e. mej[B][E] = 1.0\n", "\n", "================================== 11 / 15 =====================================\n", "\n", "Triad support:\n", "C > D and D > F\n", "Therefore:\n", "C > F i.e. mej[C][F] = 1.0\n", "\n", "================================== 12 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > E\n", "Therefore:\n", "A > E i.e. mej[A][E] = 1.0\n", "\n", "================================== 13 / 15 =====================================\n", "\n", "Triad support:\n", "B > C and C > F\n", "Therefore:\n", "B > F i.e. mej[B][F] = 1.0\n", "\n", "================================== 14 / 15 =====================================\n", "\n", "Triad support:\n", "A > B and B > F\n", "Therefore:\n", "A > F i.e. mej[A][F] = 1.0\n", "\n", "Resulted MEJ:\n", "┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n", "│ │ A │ B │ C │ D │ E │ F │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ A │ 1/2 │ 1 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ B │ 0 │ 1/2 │ 1 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ C │ 0 │ 0 │ 1/2 │ 1 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ D │ 0 │ 0 │ 0 │ 1/2 │ 1 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ E │ 0 │ 0 │ 0 │ 0 │ 1/2 │ 1 │\n", "├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n", "│ F │ 0 │ 0 │ 0 │ 0 │ 0 │ 1/2 │\n", "└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n", "\n", "\n", "Answered by the expert: 5\n", "Completed by the triads: 10\n" ] } ], "source": [ "import numpy as np\n", "\n", "from pymcdm.methods import COMET\n", "from pymcdm.methods.comet_tools import TriadSupportExpert\n", "\n", "# Define characteristic values for two criteria.\n", "cvalues = [\n", " [0, 500, 1000],\n", " [1, 5]\n", " ]\n", "\n", "# Define expert function as TriadSupportExpert object, which will prompt you to\n", "# answer some pairwise comparison questions to compare the characteristic objects.\n", "expert_function = TriadSupportExpert(\n", " criteria_names=['Price [$]', 'Profit [grade]'],\n", " show_MEJ=True,\n", " filename=None,\n", " )\n", "\n", "# Creation of the COMET object will start model identification (see output below).\n", "comet = COMET(cvalues, expert_function)" ] }, { "cell_type": "markdown", "id": "99421760-dcc9-4aea-b469-b5659a2630dd", "metadata": {}, "source": [ "# Compromise COMET Example" ] }, { "cell_type": "code", "execution_count": 3, "id": "e6f5313d-4217-4c6d-a5f3-d9972e14921a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0.11764706 0.35294118 0.47058824 0.70588235 0.88235294\n", " 0.05882353 0.17647059 0.41176471 0.58823529 0.76470588 0.94117647\n", " 0.23529412 0.29411765 0.52941176 0.64705882 0.82352941 1. ]\n" ] } ], "source": [ "import numpy as np\n", "\n", "from pymcdm.methods import COMET, TOPSIS\n", "from pymcdm.methods.comet_tools import CompromiseExpert\n", "\n", "# Define characteristic values for three criteria.\n", "cvalues = [\n", " [0, 500, 1000],\n", " [1, 5],\n", " [1, 3, 10],\n", " ]\n", "\n", "# We will use TOPSIS with three different criteria weights vectors.\n", "# Define criteria \n", "types = np.ones(3)\n", "\n", "topsis = TOPSIS()\n", "\n", "evaluation_function = [\n", " lambda co: topsis(co, np.array([0.2, 0.3, 0.5]), types, validation=False),\n", " lambda co: topsis(co, np.array([0.3, 0.4, 0.3]), types, validation=False),\n", " lambda co: topsis(co, np.array([0.1, 0.5, 0.4]), types, validation=False),\n", " ]\n", "# Notice validation=False parameter here. It is required because normally input data is\n", "# validated in different ways, including whether there are dominated or dominant solutions\n", "# in the matrix. However, in case of evaluation of the characteristic objects some of them\n", "# will be dominant or dominated. Therefore we need to omit validation here.\n", "\n", "expert_function = CompromiseExpert(evaluation_function)\n", "\n", "# Creation of the COMET object will identify the model based on provided evaluation functions.\n", "comet = COMET(cvalues, expert_function)\n", "\n", "print(comet.p)" ] }, { "cell_type": "markdown", "id": "a5a30945-bb90-4a04-8582-ac8e785bbab6", "metadata": {}, "source": [ "# ESP Expert Example" ] }, { "cell_type": "code", "execution_count": 4, "id": "a9946348-03c1-48c6-9f2c-2496b9d8afcb", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pymcdm as pm\n", "\n", "# Define criteria bounds for the decision problem\n", "bounds = np.array([[0, 1]] * 2, dtype=float)\n", "# Define the Expected Solution Point (or Points) for this problem\n", "esps = np.array([[0.4, 0.4]])\n", "# Create the expert function using ESPExpert class\n", "expert = pm.methods.comet_tools.ESPExpert(esps,\n", " bounds,\n", " cvalues_psi=0.2)\n", "# Generate ESP-guided cvalues based on provided ESP and psi\n", "cvalues = expert.make_cvalues()\n", "# Create and identify COMET model\n", "comet = pm.methods.COMET(cvalues, expert)\n", "# Create a visualization of the characteriscic values,\n", "# ESP and preference function\n", "fig, ax = plt.subplots(figsize=(4, 3.5), dpi=200)\n", "ax, cax = pm.visuals.comet_2d_esp_plot(comet, esps, bounds)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "abe0ba12-5122-4a9c-95a8-96eefdb6fc0e", "metadata": {}, "source": [ "# Structural COMET Example" ] }, { "cell_type": "code", "execution_count": 5, "id": "506ce53d-5d44-4a1c-bdb1-48b8e9b21592", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.68790081 0.47987326]\n", "[0.57315653 0.59720388 0.7717737 0.69961053 0.4911195 0.46185119\n", " 0.45946537 0.51384576 0.83742736 0.1512458 ]\n" ] } ], "source": [ "import numpy as np\n", "\n", "from pymcdm.methods import TOPSIS\n", "from pymcdm.methods.comet_tools import StructuralCOMET, Submodel, MethodExpert\n", "\n", "# This is simplified example from the followed paper:\n", "# Shekhovtsov, A., Kołodziejczyk, J., & Sałabun, W. (2020). Fuzzy model\n", "# identification using monolithic and structured approaches in decision\n", "# problems with partially incomplete data. Symmetry, 12(9), 1541.\n", "\n", "# Suppose we want to evaluate some electric vechcles\n", "# and define four criteria for them:\n", "criteria_names = ['C_1 Max velocity', 'C_2 Travel range',\n", " 'C_3 Charging time', 'C_4 Price']\n", "\n", "cvalues = [\n", " [57, 107.3, 150],\n", " [100, 144, 180],\n", " [4, 7, 10],\n", " [12.9, 43.3, 120]\n", " ]\n", "\n", "# We want to group C_1 and C_2 into submodel P_1 and then group P_1 with C_3\n", "# in order to create submodel P_2 and then group P_2 with C_4 to evaluate final\n", "# preferene P.\n", "\n", "# Define equal weights for all submodels\n", "weights = np.array([0.5, 0.5])\n", "\n", "# For this puprpose we can define StructuralCOMET object in the following way:\n", "model = StructuralCOMET(\n", " submodels=[\n", " Submodel(\n", " name='P_1', # Name the submodel so we could refer to it later\n", " structure=(0, 1), # We could use indexes to refer to criteria\n", " cvalues=[0.0, 0.5, 1.0], # Because normally output of the COMET\n", " # is in range [0, 1] it is good idea\n", " # to put cvalues in this range here.\n", " expert_function=MethodExpert(TOPSIS(), weights, [1, 1])\n", " ),\n", " Submodel(\n", " name='P_2',\n", " structure=('P_1', 'C_3 Charging time'), # Names also allowed\n", " cvalues=[0.0, 0.5, 1.0],\n", " expert_function=MethodExpert(TOPSIS(), weights, [1, -1])\n", " ),\n", " Submodel(\n", " name='P',\n", " structure=('P_2', 'C_4 Price'),\n", " cvalues=None, # This is the final model\n", " # so we don't need cvalues\n", " expert_function=MethodExpert(TOPSIS(), weights, [1, -1])\n", " )\n", " ],\n", " cvalues=cvalues,\n", " criteria_names=criteria_names\n", " )\n", "\n", "# And now we can evaluate some alternatives\n", "alts = np.array([\n", " [120, 130, 5, 40],\n", " [100, 180, 8, 60],\n", " ])\n", "\n", "print(model(alts))\n", "\n", "# Consider more complex example (full example from the referenced paper)\n", "# This one is used as test case for the StructuralCOMET\n", "cvalues = [\n", " [340, 909.3, 3000],\n", " [57, 107.3, 150],\n", " [100, 144, 180],\n", " [10, 87.9, 200],\n", " [80, 325.8, 610],\n", " [4, 7, 10],\n", " [10, 54, 120],\n", " [10.5, 37.57, 99],\n", " [12.9, 43.3, 120]\n", " ]\n", "\n", "criteria_names = [f'C_{i+1}' for i in range(len(cvalues))]\n", "\n", "matrix = np.array([\n", " [3000, 96, 145, 200, 610, 10.0, 120, 99.0, 120.0],\n", " [2000, 100, 145, 200, 610, 10.0, 120, 99.0, 90.0],\n", " [ 705, 120, 170, 80, 270, 4.0, 30, 24.0, 25.0],\n", " [ 613, 140, 180, 140, 400, 8.0, 40, 24.2, 50.0],\n", " [ 350, 100, 110, 30, 196, 4.5, 15, 10.5, 12.9],\n", " [ 350, 100, 100, 30, 196, 4.5, 15, 10.5, 15.5],\n", " [ 350, 100, 150, 30, 196, 7.0, 35, 16.0, 18.7],\n", " [ 635, 110, 170, 49, 200, 8.0, 35, 22.5, 31.5],\n", " [ 340, 150, 160, 110, 500, 6.0, 10, 35.0, 45.0],\n", " [ 750, 57, 110, 10, 80, 8.0, 120, 35.0, 24.4]\n", " ], dtype='float')\n", "\n", "model = StructuralCOMET(\n", " submodels=[\n", " Submodel((0, 1, 2),\n", " [8.24041444e-02, 4.53869580e-01, 7.85105159e-01],\n", " MethodExpert(\n", " TOPSIS(),\n", " np.ones(3)/3, [1, 1, 1]),\n", " 'P_1'),\n", " Submodel((3, 4),\n", " [0.00000000e+00, 4.43071484e-01, 1.00000000e+00],\n", " MethodExpert(\n", " TOPSIS(),\n", " np.ones(2)/2, [1, 1]),\n", " 'P_2'),\n", " Submodel((5, 6, 7),\n", " [1.49566750e-01, 4.81255932e-01, 7.15106856e-01],\n", " MethodExpert(\n", " TOPSIS(),\n", " np.ones(3)/3, [-1, -1, 1]),\n", " 'P_3'),\n", " Submodel(('P_1', 'P_3', 'P_2', 'C_9'),\n", " None,\n", " MethodExpert(\n", " TOPSIS(),\n", " np.ones(4)/4, [1, 1, 1, -1]),\n", " 'P Final')\n", " ],\n", " cvalues=cvalues,\n", " criteria_names=criteria_names\n", " )\n", "\n", "res = model(matrix)\n", "\n", "print(res)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" }, "vscode": { "interpreter": { "hash": "eabca979b0553fa6d87e9a00c352604d3b703d4afc9641643dd42376492b80f6" } } }, "nbformat": 4, "nbformat_minor": 5 }