Acme-Affinity

 view release on metacpan or  search on metacpan

lib/Acme/Affinity.pm  view on Meta::CPAN

  use Acme::Affinity;

  # Please see the documentation for the contents of these values
  my %arguments = (questions => [], importance => {}, me => [], you => []);

  my $affinity = Acme::Affinity->new(%arguments);

  my $score = $affinity->score;

=head1 DESCRIPTION

An C<Acme::Affinity> object computes the relationship affinity between two
people based on a common list of questions, answers and their weighted
importance.

=head1 ATTRIBUTES

=head2 questions

This is a list of hash references with question keys and answer array
references.

Example:

  [
    { 'how messy are you' => [ 'very messy', 'average', 'very organized' ] },
    { 'do you like to be the center of attention' => [ 'yes', 'no' ] },
  ]

=head2 importance

This is a hash reference with importance level keys and weight values.

Default:

  {
    'irrelevant'         => 0,
    'a little important' => 1,
    'somewhat important' => 10,
    'very important'     => 50,
    'mandatory'          => 250,
  }

=head2 me

This is an array reference triple of question responses, desired
responses and importance levels of person A for each of the given
B<questions>.

Example:

  #   Person A           Person B           Importance
  [ [ 'very organized',  'very organized',  'very important' ],
    [ 'no',              'no',              'a little important' ], ]

So person A ("me") considers him or herself to be "very organized",
desires a "very organized" person, and this is "very important" to
them.

Person A also does not need to be the "center of attention", desires
the same type of person, but this is only "a little important."

=head2 you

This is an array reference triple of question responses, desired
responses and importance levels of person B for each of the given
B<questions>.

Example:

  #   Person B           Person A    Importance
  [ [ 'very organized',  'average',  'a little important' ],
    [ 'yes',             'no',       'somewhat important' ], ]

Person B considers him or herself to be "very organized", but only
desires someone who is "average", and this is only "a little
important" to them.

Person B likes to be the "center of attention", desires someone who
does not, and this is "somewhat important."

=head1 METHODS

=head2 new

  my $affinity = Acme::Affinity->new(
    questions  => \@questions,
    importance => \%importance,
    me         => \@me,
    you        => \@you,
  );

Create a new C<Acme::Affinity> object.

=head2 score

  my $score = $affinity->score;

Compute the affinity score for the two given people.

=head1 SEE ALSO

The F<eg/*> and F<t/01-methods.t> programs in this distribution.

L<Moo>

L<Math::BigRat>

L<https://www.youtube.com/watch?v=m9PiPlRuy6E>

=head1 AUTHOR

Gene Boggs <gene@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2022 by Gene Boggs.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.



( run in 0.769 second using v1.01-cache-2.11-cpan-df04353d9ac )