Architecture for Requirements-driven Self-reconfiguration