Just an instructional toy, it predicts the likelihood of a project to succeed based on 1) Leadership, 2) Resources, and 3) Deadline, for which you will enter their ratings at the command prompt after running the script. Press Ctrl-C to quit.

You will need to have AI::Fuzzy and AI::FuzzyInference installed.

In a sense, fuzzy logic is not unlike regression analysis.

use strict; use warnings; use AI::Fuzzy; use AI::FuzzyInference; print "##### Project Success Prediction System by Fuzzy Logic #####\n\ +n"; print "Predict the likelihood of a project to succeed based on\n"; print "1) Leadership, 2) Resources, and 3) Deadline.\n"; print "Press Ctrl-C to quit.\n\n"; print "Leadership quality (1: poor - 10: superb): "; my $predict = predict(); while(<STDIN>){print $predict->($_)} sub predict { my $infer = infer(); my @prompt = ( "Leadership quality (1: poor - 10: superb): ", "Resources (physical & human) available (1: scarce - 10: plent +y): ", "Deadline (1: tight - 10: reasonable): " ); my @input; return sub { push @input, shift; return $#input < 2 ? $prompt[$#input+1] : $infer->(map{shift @ +input}1..3) . "\n\n" . $prompt[$#input+1]; }; } sub infer { my $proj = new AI::FuzzyInference; $proj->inVar('leadership', 1, 10, poor => [ 1,1, 5,0], good => [4,0, 7,1, 9,0], superb => [8,0, 10,1 ] ); $proj->inVar('resources', 1, 10, scarce => [ 1,1, 5,0], adequate => [4,0, 6,1, 8,0], plenty => [7,0, 10,1 ] ); $proj->inVar('deadline', 1, 10, tight => [ 1,1, 6,0], reasonable => [4,0, 10,1 ] ); $proj->outVar('success', 0, 100, unlikely => [ 0,1, 45,0], maybe => [40,0, 60,1, 85,0], likely => [80,0, 100,1 ] ); $proj->addRule( 'leadship=poor & resources=scarce & deadline=tight' + => 'success=unlikely', 'leadership=poor & resources=scarce & deadline=reasonable' + => 'success=unlikely', 'leadership=poor & resources=adequate & deadline=tight' + => 'success=unlikely', 'leadership=poor & resources=adequate & deadline=reasonable' + => 'success=maybe', 'leadership=poor & resources=plenty & deadline=tight' + => 'success=maybe', 'leadership=poor & resources=plenty & deadline=reasonable' + => 'success=maybe', 'leadership=good & resources=scarce & deadline=tight' + => 'success=unlikely', 'leadership=good & resources=scarce & deadline=reasonable' + => 'success=maybe', 'leadership=good & resources=adequate & deadline=tight' + => 'success=maybe', 'leadership=good & resources=adequate & deadline=reasonable' + => 'success=likely', 'leadership=good & resources=plenty & deadline=tight' + => 'success=maybe', 'leadership=good & resources=plenty & deadline=reasonable' + => 'success=likely', 'leadership=superb & resources=scarce & deadline=tight' + => 'success=maybe', 'leadership=superb & resources=scarce & deadline=reasonable' + => 'success=maybe', 'leadership=superb & resources=adequate & deadline=tight' + => 'success=maybe', 'leadership=superb & resources=adequate & deadline=reasonable' + => 'success=likely', 'leadership=superb & resources=plenty & deadline=tight' + => 'success=maybe', 'leadership=superb & resources=plenty & deadline=reasonable' + => 'success=likely' ); my $success = new AI::Fuzzy::Axis; use constant K => 1e-12; $success->addlabel("unlikely", - K, 0, 45 ); $success->addlabel("maybe", 40, 60, 85 ); $success->addlabel("likely", 80, 100, 100+K); return sub { $proj->compute(leadership => $_[0], resources => $_[1], deadli +ne => $_[2]); my @predict = @{[$success->labelvalue($proj->value('success')) +]}; my $predict; if ($predict[0] =~ /unlikely/i) { $predict = "\n\n~~~~~ Sorry, you're screwed. (Prediction c +onfidence: " . int(100*$predict[1]) . "%). ~~~~~\n\n"; } elsif ($predict[0] =~ /maybe/i) { $predict = "\n\n----- Take heart, you'll probably make it. + (Prediction confidence: " . int(100*$predict[1]) . "%). -----\n\n"; } elsif ($predict[0] =~ /likely/i) { $predict = "\n\n***** Congrat, you're like to succeed. (Pr +ediction confidence: " . int(100*$predict[1]) . "%). *****\n\n"; } return $predict; }; }

In reply to Predict project success by fuzzy logic by chunlou

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.