An optimized component selection algorithm and fuzzy logic based component evaluation for a component based self adaptive software architecture