thanks!  that's exactly what I was looking for.

peter

--- [EMAIL PROTECTED] wrote:
> First -- here's the definitive source:
> 
>        
> ftp://ftp.cs.utexas.edu/pub/ops5-benchmark-suite
> 
> But the "manners" version isn't in Jess syntax.
> Attached see my
> translations of the program and the data generator.
> 
> I think peter wrote:
> > 
> > I tried to google for a clips version of manners
> > benchmark for Jess. Would anyone have a pointer to
> it?
> > I did a search for temple university clips manners
> > benchmark, but the URL is no longer available.
> > 
> > thanks in advance.
> > 
> 
> 
> 
> 
>
---------------------------------------------------------
> Ernest Friedman-Hill  
> Distributed Systems Research        Phone: (925)
> 294-2154
> Sandia National Labs                FAX:   (925)
> 294-2234
> PO Box 969, MS 9012                
> [EMAIL PROTECTED]
> Livermore, CA 94550        
> http://herzberg.ca.sandia.gov
> > ;; Deftemplates
> 
> (deftemplate guest (slot name) (slot sex) (slot
> hobby))
> 
> (deftemplate last_seat (slot seat))
> 
> (deftemplate seating
>   (slot id) (slot pid) (slot seat1) (slot name1)
> (slot name2) (slot seat2) (slot path_done))
> 
> (deftemplate path (slot id) (slot name) (slot seat))
> 
> (deftemplate chosen (slot id) (slot name) (slot
> hobby))
> 
> (deftemplate count (slot c))
> 
> (deftemplate context (slot state))
> 
> (defrule assign_first_seat
>   ?ctxt <- (context (state start))
>   (guest (name ?n))
>   ?count <- (count (c ?c))
>   =>
>   (assert (seating (seat1 1) (name1 ?n) (name2 ?n)
> (seat2 1) (id ?c) (pid 0) (path_done yes)))
>   (assert (path (id ?c) (name ?n) (seat 1)))
>   (modify ?count (c (+ ?c 1)))
>   (printout t seat " " 1 " " ?n " " ?n " " 1 " " ?c
> " " 0 " " 1 crlf)
>   (modify ?ctxt (state assign_seats)))
> 
> (defrule find_seating
>   ?ctxt <- (context (state assign_seats))
>   (seating (seat1 ?seat1) (seat2 ?seat2) (name2 ?n2)
> (id ?id) (pid ?pid) (path_done yes))
>   (guest (name ?n2) (sex ?s1) (hobby ?h1))
>   (guest (name ?g2) (sex ~?s1) (hobby ?h1))
>   ?count <- (count (c ?c))
>   (not (path (id ?id) (name ?g2)))
>   (not (chosen (id ?id) (name ?g2) (hobby ?h1)))
>   =>
>   (assert (seating (seat1 ?seat2) (name1 ?n2) (name2
> ?g2) (seat2 (+ ?seat2 1)) (id ?c)
>                    (pid ?id) (path_done no)))
>   (assert (path (id ?c) (name ?g2) (seat ( + ?seat2
> 1))))
>   (assert (chosen (id ?id) (name ?g2) (hobby ?h1)))
>   (modify ?count (c (+ ?c 1)))
>   (printout t seat " " ?seat2 " " ?n2 " " ?g2 crlf)
>   (modify ?ctxt (state make_path)))
> 
> (defrule path_done
>   ?ctxt <- (context (state make_path))
>   ?seat <- (seating (path_done no))
>   =>
>   (modify ?seat (path_done yes))
>   (modify ?ctxt (state check_done)))
> 
> 
> (defrule make_path
>   (context (state make_path))
>   (seating (id ?id) (pid ?pid) (path_done no))
>   (path (id ?pid)(name ?n1) (seat ?s))
>   (not (path (id ?id) (name ?n1)))
>   =>
>   (assert (path (id ?id) (name ?n1) (seat ?s))))
> 
> (defrule continue
>   ?ctxt <- (context (state check_done))
>   =>
>   (modify ?ctxt (state assign_seats)))
> 
> (defrule are_we_done
>   ?ctxt <- (context (state check_done))
>   (last_seat (seat ?l_seat))
>   (seating (seat2 ?l_seat))
>   =>
>   (printout t crlf "Yes, we are done!!" crlf)
>   (modify ?ctxt (state print_results))
> )
> 
> (defrule print_results
>   (context (state print_results))
>   (seating (id ?id) (seat2 ?s2))
>   (last_seat (seat ?s2))
>   ?path <- (path (id ?id) (name ?n) (seat ?s))
>   =>
>   (retract ?path)
>   (printout t ?n " " ?s crlf))
> 
> (defrule all_done
>   (context (state print_results))
>   =>
>   (halt))
> 
> (set-reset-globals t)
> (defglobal ?*t* = (time))
> (reset)
> (batch "mann90.dat")
> ;; (watch rules) 
> ;;(printout t (run) crlf)
> (run)
> (printout t "Elapsed time: " (- (time) ?*t*) crlf)
> ;; (exit)
> 
> 
> 
> 
> 
> 
> > #include <stdio.h>
> #include <math.h>
> 
>
/****************************************************************
>   Tim Grose
>   January 29, 1991
>   Miss Manners Data Generator
> 
>   The purpose of this program is to generate a file
> of make
>   statements that can be used as an input data set
> for the 
>   Miss Manners OPS5c program.
> 
>   All input to this program will be interactively
> obtained from
>   the user.  The file of make statements will be
> written to 
>   file manners.dat.
> 
>   The user specifies how many guests there will be. 
> Each guest's
>   name will be a unique integer.  Each guest is
> assigned a sex at
>   random.  The user can specify the total number of
> hobbies it is
>   possible for a guest to have, and a lower limit of
> the number
>   of hobbies for a guest.  For instance, if the user
> chooses 10
>   hobbies and a lower limit of 3 hobbies, each guest
> will have
>   between 3 and 10 hobbies.  The hobbies will be
> designated with
>   an integer.  Finally, the user can specify the
> number of seats
>   available.
> 
>   The sex of the guests is assigned so that
> approximately half of
>   the guests are male and half are female.
>
*****************************************************************/
> 
> main()
> {
>   FILE *fopen(), *output_file;
>   int seed, max_hobby, min_hobby, guest_num,
> seat_num, max_male, max_female;
>   int chosen_hobby, count, number, rand_num,
> hobby_num, hobby_count;
>   int hobbies[100], male_count, female_count;
>   char sex,fname[20];
>   float num;
> 
>   printf("Miss Manners Data Generator\n\n");
>   printf("How many guests will there be? ");
>   scanf("%d",&guest_num);
> 
>   strcpy(fname,"mann");
>   sprintf(&fname[4],"%d",guest_num);
>   strcat(fname,".dat");
> 
>   output_file = fopen(fname,"w");
>   if (output_file == NULL)
>     {
>       write("\n\nError opening output file\n");
>       exit(20);
>     }
> 
> 
>   printf("How many seats are there? ");
>   scanf("%d", &seat_num);
>   printf("What is the maximum number of hobbies? ");
>   scanf("%d", &max_hobby);
>   printf("What is the minimum number of hobbies? ");
>   scanf("%d", &min_hobby);
> 
>   seed = 10;
>   srand(seed);
>   
>   male_count = 0;
>   female_count = 0;
>   max_male = guest_num / 2;
>   max_female = guest_num - max_male;
> 
>  
>
/****************************************************************/
>   /* For each guest, assign a sex and the hobbies
> for that guest. */
>  
>
/****************************************************************/
> 
>   for(count = 1; count <= guest_num; ++count)
>      {
>        rand_num = rand();
> 
>        if (rand_num < 1073741824)
>          sex = 'm';
>        else
>          sex = 'f';
> 
>        if ((sex == 'm') && (male_count == max_male))
>          sex = 'f';
> 
>        if ((sex == 'f') && (female_count ==
> max_female))
>          sex = 'm';
> 
>        if (sex == 'm')
>          male_count = male_count + 1;
> 
>        if (sex == 'f')
>          female_count = female_count + 1;
> 
>       for(hobby_count = 1; hobby_count <= max_hobby;
> ++hobby_count)
>         hobbies[hobby_count-1] = -1;
> 
> 
>
/************************************************************/
>  /* Determine the number of hobbies for this guest,
> then     */
>  /* choose them.                                    
>         */
> 
>
/************************************************************/
> 
>       rand_num = rand();
>       num = (float) rand_num / 2147483647.0;
>       hobby_num = (float) min_hobby + num *  (float)
> (max_hobby-min_hobby+1);
> 
>       for(hobby_count=1; hobby_count <= hobby_num;
> ++hobby_count)
>         {
>           do
>             {
>               rand_num = rand();
>               num = (float) rand_num / 2147483647.0;
>               chosen_hobby = 1.0 + num * (float)
> max_hobby;
>             }
>           while(hobbies[chosen_hobby - 1] != -1);
> 
>           hobbies[chosen_hobby - 1] = chosen_hobby;
> 
>           fprintf(output_file, "(assert (guest (name
> %d) (sex %c) (hobby %d)))\n",
>                                count, sex,
> chosen_hobby);
>         }
> 
>      }
> 
>   fprintf(output_file, "(assert (last_seat (seat
> %d)))\n", seat_num);
>   fprintf(output_file, "(assert (count (c 1)))\n");
>   fprintf(output_file, "(assert (context (state
> start)))\n");
> 
> } 
> 
> 


__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------

Reply via email to