case-based reasoning for perl - dfkiobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem...

59
AI::CBR Case-Based Reasoning For Perl Darko Obradovic

Upload: others

Post on 05-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

AI::CBRCase-Based Reasoning

For Perl

Darko Obradovic

Page 2: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

 

DFKI GmbHKaiserslautern.pm

http://www.dfki.uni-kl.de/[email protected]

http://[email protected]

DeutschesForschungszentrumfür KünstlicheIntelligenz GmbH

Darko Obradovic

AI::CBRCase-Based Reasoning

for Perl

Page 3: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

AnotherVietnam?

Ed TimmsDallas Morning News1995

Page 4: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new
Page 5: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Artificial Intelligence?

AI is the mimicking of human thought and cognitive processes

to solve complex problems automatically.

(one definition amongst many)

Page 6: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Case-Based Reasoning

Page 7: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Foundations:Roger Schank 1977/1983

Page 8: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

1. new problem = new case

2. experience = case-base

3. remembering = retrieval

4. apply to new problem = reuse

5. observe & learn = revise

6. memorise = retain

Page 9: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

1. new problem = new case

2. experience = case-base

3. remembering = retrieval

4. apply to new problem = reuse

5. observe & learn = revise

6. memorise = retain

Page 10: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

AI::CBR

Page 11: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

AI::CBR::Case

case-base

AI::CBR::Sim

AI::CBR::Retrieval

Page 12: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

An example!

Page 13: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# the case{ age => 40, gender => 'male', job => 'programmer', symptoms => ['headache', 'cough'],}

$diagnosis = ?

Page 14: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

It's all about similarity!

Page 15: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

compare two objects A and Bon attribute levelwith similarity functions:

$sim_1 = sim($att_A_1, $att_B_1)$sim_2 = sim($att_A_2, $att_B_2)...$sim_n = sim($att_A_n, $att_B_n)

Page 16: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

compare two objects A and Bon attribute levelwith similarity functions:

$sim_1 = sim($att_A_1, $att_B_1)$sim_2 = sim($att_A_2, $att_B_2)...$sim_n = sim($att_A_n, $att_B_n)

similarity values are between 0 and 1- 0.0 is no similarity at all- 1.0 is equality

Page 17: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

the overall similaritybetween two objects A and Bis the mean valueof their attribute's similarities:

$sim_A_B = ($sim_1 + $sim2 + … + $sim_n

) / n;

Page 18: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

the overall similaritybetween two objects A and Bis the mean valueof their attribute's similarities:

$sim_A_B = ($sim_1 + $sim2 + … + $sim_n

) / n;

similarity values are between 0 and 1- 0.0 is no similarity at all- 1.0 is equality

Page 19: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

use CBR::AI::Sim qw(sim_eq sim_frac sim_set);

# for symbolic valuessim_eq('programmer', 'programmer'); # 1.0sim_eq('programmer', 'manager'); # 0.0

Page 20: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

use CBR::AI::Sim qw(sim_eq sim_frac sim_set);

# for symbolic valuessim_eq('programmer', 'programmer'); # 1.0sim_eq('programmer', 'manager'); # 0.0

# for numbers# fraction of the smaller wrt the greatersim_frac(2, 4); # 0.5sim_frac(40, 30); # 0.75

Page 21: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

use CBR::AI::Sim qw(sim_eq sim_frac sim_set);

# for symbolic valuessim_eq('programmer', 'programmer'); # 1.0sim_eq('programmer', 'manager'); # 0.0

# for numbers# fraction of the smaller wrt the greatersim_frac(2, 4); # 0.5sim_frac(40, 30); # 0.75

# for sets/lists of symbolic values# |intersection elements| / |union elements|sim_set([qw(a b c d)], ['a']); # 0.25sim_set([qw(a b c)], [qw(b c d)]); # 0.5

Page 22: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# the case{ age => 40, gender => 'male', job => 'programmer', symptoms => ['headache', 'cough'],}

$diagnosis = ?

Page 23: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

case definition

use AI::CBR::Case;use AI::CBR::Sim qw(

sim_eq sim_frac sim_set);

my $new_case = AI::CBR::Case->new( age => { sim => \&sim_frac }, gender => { sim => \&sim_eq }, job => { sim => \&sim_eq }, symptoms => { sim => \&sim_set },);

Page 24: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

set case values

$new_case->set_values( age => 40, gender => 'male', job => 'programmer', symptoms => ['headache','cough'],);

# case definition and values# could have been done in one step

Page 25: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

fetch case-base

use DBIx::Simple;my $db = DBIx::Simple->new(...);

my @case_base = $db->query( SELECT age, gender, job, symptoms, diagnosis FROM patients)->hashes();

foreach @case_base { $_->{symptoms} = [split ',', $_->{symptoms}]}

Page 26: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

retrieve most similar case

use AI::CBR::Retrieval;

my $r = AI::CBR::Retrieval->new( $new_case, [@case_base]);$r->compute_sims();

my $solution = $r->most_similar_candidate();print $solution->{diagnosis};

Page 27: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# in case-base{ age => 28, gender => 'male', job => 'programmer', symptoms => ['headache'], diagnosis => 'hangover',}

Page 28: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7

Page 29: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7# for gender:sim_eq('male', 'male') # 1.0

Page 30: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7# for gender:sim_eq('male', 'male') # 1.0# for job:sim_eq('programmer', 'programmer') # 1.0

Page 31: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7# for gender:sim_eq('male', 'male') # 1.0# for job:sim_eq('programmer', 'programmer') # 1.0# for symptoms:sim_set(['headache','cough'], ['headache'])# 0.5

Page 32: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7# for gender:sim_eq('male', 'male') # 1.0# for job:sim_eq('programmer', 'programmer') # 1.0# for symptoms:sim_set(['headache','cough'], ['headache'])# 0.5

$sim = 3.2 / 4; # 0.8

Page 33: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

# for age:sim_frac(40, 28) # 0.7# for gender:sim_eq('male', 'male') # 1.0# for job:sim_eq('programmer', 'programmer') # 1.0# for symptoms:sim_set(['headache','cough'], ['headache'])# 0.5

$sim = 3.2 / 4; # 0.8

$diagnosis => 'hangover'!

Page 34: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

What else can you do?

Page 35: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Similarity Functions

● define your own ones!● there are millions of different use-cases● flexibility with optional parameter

Page 36: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Similarity Functions

● define your own ones!● there are millions of different use-cases● flexibility with optional parameter

● code them in C● most efficient tuning

Page 37: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Retrieval

● multiple methods:● most_similar_candidate()● n_most_similar_candidates($n)● first_confirmed_candidate('diagnosis')

Page 38: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Retrieval

● multiple methods:● most_similar_candidate()● n_most_similar_candidates($n)● first_confirmed_candidate('diagnosis')

1. Hangover

2. Stress

3. Whiplash Injury

4. Stress

5. …

Page 39: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Retrieval

● multiple methods:● most_similar_candidate()● n_most_similar_candidates($n)● first_confirmed_candidate('diagnosis')

1. Hangover

2. Stress

3. Whiplash Injury

4. Stress

5. …

Page 40: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Retrieval

● multiple methods:● most_similar_candidate()● n_most_similar_candidates($n)● first_confirmed_candidate('diagnosis')

1. Hangover

2. Stress

3. Whiplash Injury

4. Stress

5. …

● subclass & extend!

Page 41: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

IntelligentProduct

Retrieval

Page 42: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new
Page 43: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

1. query = new case

2. products = case-base

3. search = retrieval

Page 44: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

CompoundCases

Page 45: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

Page 46: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

0.9

0.90.9

Page 47: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

0.9

0.90.9

0.9

Page 48: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

0.9

0.1

0.9

Page 49: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

0.9

0.1

0.9

0.63 ?

Page 50: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Compound Case

use AI::CBR::Case::Compound;

my $case = AI::CBR::Case::Compound->new([ $flight_spec, $hotel_spec, $destination_spec,]);

$sim = nroot(3, $sim_flight * $sim_hotel * $sim_destination);

Page 51: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Trip

0.9

0.1

0.9

0.43

Page 52: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

What did you do with it?

Page 53: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

CYBORGAI for a strategy game

Page 54: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

situations+

decisions

observation

Page 55: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

situations+

decisions

reuse

Page 56: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

Conclusions

● observed 15-30 games per player● thousands of comarisons per turn

● ~400 turns per game

➔ system performance ok➔ AI performance good

● for details, see homepage

Page 57: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

The End

Thank you!

Questions?

Page 58: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

matrix similarity function

my $os_matrix = { linux => { mac => 0.8, win => 0.2 }, mac => { linux => 0.8, win => 0.5 }, win => { linux => 0.2, mac => 0.5 },};

$new_case = AI::CBR::Case->new( os => { sim => \&sim_matrix, param => $os_matrix }, ...);

Page 59: Case-Based Reasoning For Perl - DFKIobradovi/download/ai-cbr.pdf · 2009. 8. 10. · 1. new problem = new case 2. experience = case-base 3. remembering = retrieval 4. apply to new

matrix similarity function

sub sim_matrix { my ($a, $b, $matrix) = @_; return 1 if $a eq $b; return $matrix->{$a}->{$b};}