Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sociagrams: How to design a social machine

120 views

Published on

SOCIAM all-hands meeting, September, University of Oxford

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Sociagrams: How to design a social machine

  1. 1. Sociagrams Demo How to design a social machine Alan Davoust, Petros Papapanagiotou, Dave Murray-Rust, Max Van Kleek, Areti Manataki
  2. 2. First give them a whiteboard
  3. 3. Then Rapidly Prototype with The Sociagrammer!™
  4. 4. Step 1: Put in the roles
  5. 5. Step 2: Add (generic) protocols
  6. 6. Step 2(b): Customize generic protocols
  7. 7. Step 3: Automatically derive e/k
  8. 8. Behind the scenes: generic protocols ● Role1 → TELL[predicate(param1:type1, param2:type2)] → Role2 ● Role1 → ASK[predicate(param1:type1, param2:type2)] → Role2 ● Role1 → ASK_ALL[predicate(param1:type1, param2:type2)] → Role2 ● Role1 → RESERVE[predicate(param1:type1, param2:type2)] → Role2 ● Role1 → SIGN UP [] → Role2 ● ...
  9. 9. Role1 → ASK[predicate(param1:type1, param2:type2)] → Role2 To be a <Role1>: if elicit[hasRole(R,<Role2>)] then Send message ask(<predicate>) to <Role2> R then either ( Wait for message reply_yes(<predicate(P1,P2,...)>) from <Role2> R then know[ <predicate(P1,P2,...)>] ) or ( Wait for message reply_no from <Role2> R ). To be a <Role2>: Wait for message ask(<predicate>) from <Role1> R then either ( if elicit[<predicate(P1,P2,...)>] then Send message reply_yes(<predicate(P1,P2,...)>) to <Role1> R ) or ( if elicit[not(<predicate(P1,P2,...)>)] then Send message reply_no to <Role1> R ).
  10. 10. CyberMadre → ASK[have_food(name:String,quantity:Int,giver:ID)] → Giver To be a Cybermadre: if elicit[hasRole(R,Giver)] then Send message ask(have_food) to Giver R then either ( Wait for message reply_yes(have_food(N,Q,ID)) from Giver R then know[ have_food(N,Q,ID) ] ) or ( Wait for message reply_no from Giver R ). To be a Giver: Wait for message ask(have_food) from Cybermadre R then either ( if elicit[have_food(N,Q,ID)] then Send message reply_yes(have_food(N,Q,ID)) to Cybermadre R ) or ( if elicit[not(have_food(N,Q,ID))] then Send message reply_no to Cybermadre R ).
  11. 11. Steps 2+3 iterated ...
  12. 12. What about custom protocols (e.g. “deliver”…) ?
  13. 13. Step 4: Link e/k
  14. 14. Behind the scenes: Composition Giver → SIGN_UP[] → CyberMadre + CyberMadre → ASK_ALL[have_food(name,quantity,giver)] → Giver + CyberMadre → RESERVE[food(name,quantity,giver)] → Giver = ??? ● Need composition semantics + alignment of e/k’s
  15. 15. CyberMadre → ASK_ALL[have_food(name,quantity,giver)] → Giver + CyberMadre → RESERVE[food(name,quantity,giver)] → GiverTo be a CyberMadre: if getListOfRole(L,Giver) then Play role Asker(L). To be a Asker(L): either ( if L = [R|T] and hasRole(R,Giver) then Send message ask(have_food) to Giver R then either ( Wait for message reply_yes(have_food(Name,Quantity,ID)) from Giver R then Know have_food(Name,Quantity,ID) then if hasRole(R,Giver) and reserve(food(Name,Quantity,R)) and not(reserved(food(Name,Quantity,R))) then Send message reserve(food(Name,Quantity,R)) to Giver R then either ( Wait for message reserved(food(Name,Quantity,R)) from Giver R then Know reserved(food(Name,Quantity,R)) ) or ( Wait for message failed from Giver R ) ) or ( Wait for message reply_no from Giver R then Play role Asker(T)) ) or ( if L = [] then Know not(have_food) ). To be a Giver: Wait for message ask(have_food) from CyberMadre R then either ( if have_food(Name,Quantity,ID) then Send message reply_yes(have_food(Name,Quantity,ID)) to CyberMadre R then Wait for message reserve(food(Name,Quantity,ID)) from CyberMadre R then either ( if reserve(food(Name,Quantity,ID)) and not(reserved(food(Name,Quantity,ID))) then Send message reserved(food(Name,Quantity,ID)) to CyberMadre Rtthen Knowreserved(food(Name,Quantity,ID)) ) or ( if not(reserve(food(Name,Quantity,ID))) then Send message failed to CyberMadre R ) or ( if reserved(food(Name,Quantity,ID)) then Send message failed to CyberMadre R ) ) or ( if not(have_food(Name,Quantity,ID)) then Send message reply_no to CyberMadre R ).
  16. 16. CyberMadre → ASK_ALL[have_food(name,quantity,giver)] → Giver + CyberMadre → RESERVE[food(name,quantity,giver)] → GiverTo be a CyberMadre: if getListOfRole(L,Giver) then Play role Asker(L). To be a Asker(L): either ( if L = [R|T] and hasRole(R,Giver) then Send message ask(have_food) to Giver R then either ( Wait for message reply_yes(have_food(Name,Quantity,ID)) from Giver R then Know have_food(Name,Quantity,ID) then if hasRole(R,Giver) and reserve(food(Name,Quantity,R)) and not(reserved(food(Name,Quantity,R))) then Send message reserve(food(Name,Quantity,R)) to Giver R then either ( Wait for message reserved(food(Name,Quantity,R)) from Giver R then Know reserved(food(Name,Quantity,R)) ) or ( Wait for message failed from Giver R ) ) or ( Wait for message reply_no from Giver R then Play role Asker(T)) ) or ( if L = [] then Know not(have_food) ). To be a Giver: Wait for message ask(have_food) from CyberMadre R then either ( if have_food(Name,Quantity,ID) then Send message reply_yes(have_food(Name,Quantity,ID)) to CyberMadre R then Wait for message reserve(food(Name,Quantity,ID)) from CyberMadre R then either ( if reserve(food(Name,Quantity,ID)) and not(reserved(food(Name,Quantity,ID))) then Send message reserved(food(Name,Quantity,ID)) to CyberMadre Rtthen Know reserved(food(Name,Quantity,ID)) ) or ( if not(reserve(food(Name,Quantity,ID))) then Send message failed to CyberMadre R
  17. 17. Step 5: derive data model (automatic) k(Giver(name)) k(DeliveryPerson(name, location)) k(HungryPerson(name, location)) k(FoodAvailable(description, date, Giver)) k(Reserve(FoodAvailable)) k(Delivery(date,time,FoodAvailable,DeliveryPerson))
  18. 18. Step 5: derive data model (automatic) k(Giver(name)) k(DeliveryPerson(name, location)) k(HungryPerson(name, location)) k(FoodAvailable(description, date, Giver)) k(Reserve(FoodAvailable)) k(Delivery(date,time,FoodAvailable,DeliveryPerson)) Giver name
  19. 19. Step 5: derive data model (automatic) k(Giver(name)) k(DeliveryPerson(name, location)) k(HungryPerson(name, location)) k(FoodAvailable(description, date, Giver)) k(Reserve(FoodAvailable)) k(Delivery(date,time,FoodAvailable,DeliveryPerson)) FoodAvailable descr date Giver name
  20. 20. Step 5: derive data model (automatic) k(Giver(name)) k(DeliveryPerson(name, location)) k(HungryPerson(name, location)) k(FoodAvailable(description, date, Giver)) k(Reserve(FoodAvailable)) k(Delivery(date,time,FoodAvailable,DeliveryPerson)) FoodAvailable descr date GiverReserve name
  21. 21. Step 5: derive data model (automatic) k(Giver(name)) k(DeliveryPerson(name, location)) k(HungryPerson(name, location)) k(FoodAvailable(description, date, Giver)) k(Reserve(FoodAvailable)) k(Delivery(date,time,FoodAvailable,DeliveryPerson)) HungryPerson name location FoodAvailable descr date GiverReserve Delivery Person Delivery date name
  22. 22. Step 6: Generating agents ● Which are bots and which are people? ○ Autonomous agents (all e and k automated) ○ Interface agents (some manual e, some storage of k) → automatically generated UIs ○ Humans (connected via… web interface, twitter, etc ?) automation
  23. 23. Demo
  24. 24. More questions to be addressed What about decentralization? Access control ? How do agents know about each other?
  25. 25. Where to store the information? Who needs to know about what? FoodAvailable descr date Giver Reserve Madres will need to e(FoodAvailable(X)) in order to decide to reserve it and schedule a delivery. Madre Giver Givers need to know that food is reserved so they don’t throw it out.
  26. 26. CyberMadres Central Multiple Madres / Multiple Givers FoodAvailable descr date Giver Reserve Madre Giver MadreMadre Reserve Giver
  27. 27. Access Control Can anyone be a Giver? An Informant? A Madre? A Delivery person? A Hungry Person?
  28. 28. Access Control and protocol composition The Reputation Issue (™) Giver Giver SIGN UP ASK (Food)
  29. 29. Access Control and protocol composition The Reputation Issue (™) Giver Giver SIGN UP Reputation ASK (Food)
  30. 30. Access Control and protocol composition The Reputation Issue (™) Giver Giver SIGN UP Reputation Unreputable Giver Reputable Giver → Use predicate isReputableGiver(...) with custom definition to trigger ASK ASK (Food)
  31. 31. That’s all folks! Thanks! Questions ?
  32. 32. Where to store the information? Who needs to know about what? HungryPerson name location FoodAvailable descr date GiverReserve Delivery Person Delivery date
  33. 33. Where to store the information? Who needs to know about what? HungryPerson name location FoodAvailable descr date GiverReserve Delivery Person Delivery date Madres will need to e(FoodAvailable(X)) in order to decide to reserve it and schedule a delivery. Madre
  34. 34. Where to store the information? Who needs to know about what? HungryPerson name location FoodAvailable descr date GiverReserve Delivery Person Delivery date Madres will need to e(FoodAvailable(X)) in order to decide to reserve it and schedule a delivery. Madre Delivery People need to e(Delivery(., ME,..)) related to themselves to know when to actually deliver the food DeliveryPerson
  35. 35. How do agents know about each other? Which actors are described in the system? => data model tells us about some (HungryPerson, DeliveryPerson, Giver). => actors with access control (Madres) presumably have accounts. They might be automatically notified by a centralized system: Givers/Informants need to know about CyberMadres Central, who then transfers all information to all Madres. => Add Actor (central system) and protocol: if system is told X, system broadcasts X to all Madres.

×