A multi-objective performance optimization approach for self-adaptive architectures