Heterogeneous Swarms: Jointly Optimizing Model Roles and Weights for Multi-LLM Systems