Welcome to CoopIHC’s documentation!
Warning
This is a version that is not entirely completed. Documentation may be outdated in some places. Please contact me directly or raise an issue if appropriate.
CoopIHC (pronounced “kopik”) is a Python module that provides a common basis for describing computational Human Computer Interaction (HCI) contexts, mostly targeted at expressing models of users and intelligent assistants.
It provides a common conceptual and practical reference, which facilitates reusing and helps extending other researcher’s work. Some examples that use CoopIHC can be found in the CoopIHC-Zoo. These full examples, or parts thereof, can be re-used easily by a CoopIHC end-user.
It can help design intelligent assistants. For example, you can wrap a CoopIHC
Bundle
into an environment that is compatible with gym and use off-the-shelf Deep Reinforcement Learning algorithms to train a policy for an intelligent assistant.It provides modeling help. Currently, some checks are provided to ensure model paramters are correctly identifiable, see CoopIHC-ModelChekcs
The philosophy of CoopIHC is to separate interactive systems into three components:
A task,
A user, which is either a real user or a synthetic user model,
An assistant agent which helps the user accomplish its task.
and bundling them back together using a so-called Bundle
. Bundles can be used for many different cases:
Evaluate user (synthetic or real) coupled with an intelligent assistant,
Train a user model to obtain a realistic synthetic user model,
Train an intelligent assistant given some synthetic user model,
Jointly train an intelligent assistant and a synthetic user model …
… and more
CoopIHC builds on a two-agent interaction model, see the Interaction Model and Terminology.
Known Caveats
In place additions e.g.
self.state['x'] += 1
work, but do not trigger the expectedout_of_bounds_mode
behavior. in short, the reason for that is that in place addition calls__iadd__
which is not a Numpy__ufunc__
. There are several workarounds possible. One based on the@implements
mechanism described in theStateElement
page which would fix the problem for everyone. Another is simply to do something likeself.state['x'] = self.state['x'] + 1
Some forms of indexing do not work e.g.
self.state['x'][:,1] = [2,3]
does not work. The problem could be overcome if someone shows interest. In practical cases you can work around this limitation.