Optimisation Strategies for Ensuring Fairness in Machine Learning: With and Without Demographics