public function get_inference_result(Language_variable_collection $langvar_coll)
 {
     $output_coll = new Output_language_variable_collection();
     $weight_array = $langvar_coll->get_weight_array();
     $membership_matrix = $langvar_coll->get_membership_matrix();
     for ($x = 0; $x < $output_coll->get_number(); $x++) {
         $min_array = array();
         for ($y = 0; $y < count($weight_array); $y++) {
             $min_array[] = min(array($weight_array[$y], $membership_matrix[$y][$x]));
         }
         $max = max($min_array);
         $output_coll->set_membership($x, $max);
     }
     return $output_coll;
 }
 public function get_inference_result(Language_variable_collection $langvar_coll)
 {
     $output_coll = new Output_language_variable_collection();
     $weight_array = $langvar_coll->get_weight_array();
     $membership_matrix = $langvar_coll->get_membership_matrix();
     for ($x = 0; $x < $output_coll->get_number(); $x++) {
         $multiplication_array = array();
         for ($y = 0; $y < count($weight_array); $y++) {
             $r = $weight_array[$y] * $membership_matrix[$y][$x];
             $multiplication_array[] = $r;
         }
         $result = 0;
         for ($z = 0; $z < count($multiplication_array); $z++) {
             $result = $result + $multiplication_array[$z];
         }
         if ($result > 1) {
             $result = 1;
         }
         $output_coll->set_membership($x, $result);
     }
     return $output_coll;
 }
Example #3
0
 /**
  * 改良過後計算關係度的方法
  * @param Annotation $annotation
  * @return Output_language_variable_collection
  */
 protected function _get_membership_renew(Annotation $annotation, $parameters)
 {
     //請由子類別來覆寫此方法
     $variables = explode(',', $parameters);
     $feature = $this->get_feature($annotation);
     $this->_CI_load('library', 'fuzzy/Output_language_variable_collection', 'output_language_variable_collection');
     $membership = new Output_language_variable_collection();
     $membership->set_zero();
     if (count($variables) > 1) {
         if ($feature <= $variables[0]) {
             $membership->set_membership(0, 1);
         } else {
             if ($feature >= $variables[count($variables) - 1]) {
                 $membership->set_membership(count($variables) - 1, 1);
             } else {
                 for ($i = 0; $i < count($variables) - 1; $i++) {
                     $now = $variables[$i];
                     $next = $variables[$i + 1];
                     if ($feature > $now && $feature <= $next) {
                         $len = $next - $now;
                         $m1 = 1 - ($feature - $now) / $len;
                         $m2 = 1 - ($next - $feature) / $len;
                         $membership->set_membership($i, $m1);
                         $membership->set_membership($i + 1, $m2);
                         break;
                     }
                 }
             }
         }
     }
     return $membership;
 }