from scipy.optimize import linprog
# Coefficients of the objective function (costs)
c = [25000, 28000, 12000]
# Coefficients for the carbon percentage constraints (left side)
A_ub = [
[-75, -72, -65], # 0.73 <= (x_A * 75 + x_B * 72 + x_C * 65) / (x_A + x_B + x_C)
[75, 72, 65], # (x_A * 75 + x_B * 72 + x_C * 65) / (x_A + x_B + x_C) <= 0.76
]
# Right-hand side for the carbon percentage constraints
b_ub = [-0.73, 0.76]
# Coefficients for the sulfur percentage constraints (left side)
A_ub_sulfur = [
[-23, -26, -30], # 0.23 <= (x_A * 23 + x_B * 26 + x_C * 30) / (x_A + x_B + x_C)
[23, 26, 30], # (x_A * 23 + x_B * 26 + x_C * 30) / (x_A + x_B + x_C) <= 0.25
]
# Right-hand side for the sulfur percentage constraints
b_ub_sulfur = [-0.23, 0.25]
# Combine the two constraints
A_ub_total = A_ub + A_ub_sulfur
b_ub_total = b_ub + b_ub_sulfur
# Boundaries for the variables (non-negativity)
x_bounds = [(0, None), (0, None), (0, None)]
# Solving the problem using linear programming
result = linprog(c, A_ub=A_ub_total, b_ub=b_ub_total, bounds=x_bounds, method='highs')
# Display the result
if result.success:
print(f"Optimal solution:\nCoal A: {result.x[0]} tons\nCoal B: {result.x[1]} tons\nCoal C: {result.x[2]} tons")
else:
print("Optimization failed.")
ZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbGlucHJvZwoKIyBDb2VmZmljaWVudHMgb2YgdGhlIG9iamVjdGl2ZSBmdW5jdGlvbiAoY29zdHMpCmMgPSBbMjUwMDAsIDI4MDAwLCAxMjAwMF0KCiMgQ29lZmZpY2llbnRzIGZvciB0aGUgY2FyYm9uIHBlcmNlbnRhZ2UgY29uc3RyYWludHMgKGxlZnQgc2lkZSkKQV91YiA9IFsKICAgIFstNzUsIC03MiwgLTY1XSwgICMgMC43MyA8PSAoeF9BICogNzUgKyB4X0IgKiA3MiArIHhfQyAqIDY1KSAvICh4X0EgKyB4X0IgKyB4X0MpCiAgICBbNzUsIDcyLCA2NV0sICAgICAjICh4X0EgKiA3NSArIHhfQiAqIDcyICsgeF9DICogNjUpIC8gKHhfQSArIHhfQiArIHhfQykgPD0gMC43NgpdCgojIFJpZ2h0LWhhbmQgc2lkZSBmb3IgdGhlIGNhcmJvbiBwZXJjZW50YWdlIGNvbnN0cmFpbnRzCmJfdWIgPSBbLTAuNzMsIDAuNzZdCgojIENvZWZmaWNpZW50cyBmb3IgdGhlIHN1bGZ1ciBwZXJjZW50YWdlIGNvbnN0cmFpbnRzIChsZWZ0IHNpZGUpCkFfdWJfc3VsZnVyID0gWwogICAgWy0yMywgLTI2LCAtMzBdLCAgIyAwLjIzIDw9ICh4X0EgKiAyMyArIHhfQiAqIDI2ICsgeF9DICogMzApIC8gKHhfQSArIHhfQiArIHhfQykKICAgIFsyMywgMjYsIDMwXSwgICAgICMgKHhfQSAqIDIzICsgeF9CICogMjYgKyB4X0MgKiAzMCkgLyAoeF9BICsgeF9CICsgeF9DKSA8PSAwLjI1Cl0KCiMgUmlnaHQtaGFuZCBzaWRlIGZvciB0aGUgc3VsZnVyIHBlcmNlbnRhZ2UgY29uc3RyYWludHMKYl91Yl9zdWxmdXIgPSBbLTAuMjMsIDAuMjVdCgojIENvbWJpbmUgdGhlIHR3byBjb25zdHJhaW50cwpBX3ViX3RvdGFsID0gQV91YiArIEFfdWJfc3VsZnVyCmJfdWJfdG90YWwgPSBiX3ViICsgYl91Yl9zdWxmdXIKCiMgQm91bmRhcmllcyBmb3IgdGhlIHZhcmlhYmxlcyAobm9uLW5lZ2F0aXZpdHkpCnhfYm91bmRzID0gWygwLCBOb25lKSwgKDAsIE5vbmUpLCAoMCwgTm9uZSldCgojIFNvbHZpbmcgdGhlIHByb2JsZW0gdXNpbmcgbGluZWFyIHByb2dyYW1taW5nCnJlc3VsdCA9IGxpbnByb2coYywgQV91Yj1BX3ViX3RvdGFsLCBiX3ViPWJfdWJfdG90YWwsIGJvdW5kcz14X2JvdW5kcywgbWV0aG9kPSdoaWdocycpCgojIERpc3BsYXkgdGhlIHJlc3VsdAppZiByZXN1bHQuc3VjY2VzczoKICAgIHByaW50KGYiT3B0aW1hbCBzb2x1dGlvbjpcbkNvYWwgQToge3Jlc3VsdC54WzBdfSB0b25zXG5Db2FsIEI6IHtyZXN1bHQueFsxXX0gdG9uc1xuQ29hbCBDOiB7cmVzdWx0LnhbMl19IHRvbnMiKQplbHNlOgogICAgcHJpbnQoIk9wdGltaXphdGlvbiBmYWlsZWQuIik=
MzAgNDk5ODg3NzAyCjEyODk5MDc5NSAxMzcyNzQ5MzYKNTc1Mzc0MjQ2IDk4OTA1MTg1Mwo0NzEwNDg3ODUgODUxNjg0MjUKNjQwMDY2Nzc2IDg1NjY5OTYwMwo4MTk4NDEzMjcgNjExMDY1NTA5CjcwNDE3MTU4MSAyMjM0NTAyMgo1MzYxMDgzMDEgNjc4Mjk4OTM2CjExOTk4MDg0OCA2MTY5MDgxNTMKMTE3MjQxNTI3IDI4ODAxNzYyCjMyNTg1MDA2MiA0Nzg2NzUzNzgKNjIzMzE5NTc4IDcwNjkwMDU3NAo5OTgzOTUyMDggNzM4NTEwMDM5CjQ3NTcwNzU4NSAxMzU3NDY1MDgKODYzOTEwMDM2IDU5OTAyMDg3OQozNDA1NTk0MTEgNzM4MDg0NjE2CjEyMjU3OTIzNCA1NDUzMzAxMzcKNjk2MzY4OTM1IDg2Nzk3NTg5CjY2NTY2NTIwNCA1OTI3NDk1OTkKOTU4ODMzNzMyIDQwMTIyOTgzMAozNzEwODQ0MjQgNTIzMzg2NDc0CjQ2MzQzMzYwMCA1MzEwNzI1CjIxMDUwODc0MiA5MDc4MjE5NTcKNjg1MjgxMTM2IDU2NTIzNzA4NQo2MTk1MDAxMDggNzMwNTU2MjcyCjg4MjE1Mzc3IDMxMDU4MTUxMgo1NTgxOTMxNjggMTM2OTY2MjUyCjQ3NTI2ODEzMCAxMzI3Mzk0ODkKMzAzMDIyNzQwIDEyNDI1OTE1CjEyMjM3OTk5NiAxMzcxOTkyOTYKMzA0MDkyNzY2IDIzNTA1MTQz
30 499887702
128990795 137274936
575374246 989051853
471048785 85168425
640066776 856699603
819841327 611065509
704171581 22345022
536108301 678298936
119980848 616908153
117241527 28801762
325850062 478675378
623319578 706900574
998395208 738510039
475707585 135746508
863910036 599020879
340559411 738084616
122579234 545330137
696368935 86797589
665665204 592749599
958833732 401229830
371084424 523386474
463433600 5310725
210508742 907821957
685281136 565237085
619500108 730556272
88215377 310581512
558193168 136966252
475268130 132739489
303022740 12425915
122379996 137199296
304092766 23505143