import%20marimo%0A%0A__generated_with%20%3D%20%220.11.25%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20%E6%A0%84%E9%A4%8A%E5%95%8F%E9%A1%8C%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20-%20%E5%AE%9A%E6%95%B0%0A%20%20%20%20%20%20%20%20%20%20-%20%24F%24%3A%20%E5%95%86%E5%93%81%E3%81%AE%E9%9B%86%E5%90%88%0A%20%20%20%20%20%20%20%20%20%20-%20%24N%24%3A%20%E6%A0%84%E9%A4%8A%E7%B4%A0%E3%81%AE%E9%9B%86%E5%90%88%0A%20%20%20%20%20%20%20%20%20%20-%20%24a_i%24%3A%20%E6%A0%84%E9%A4%8A%E7%B4%A0%20%24i%24%20%E3%81%AE%201%20%E6%97%A5%E3%81%AE%E6%91%82%E5%8F%96%E9%87%8F%E3%81%AE%E4%B8%8B%E9%99%90%0A%20%20%20%20%20%20%20%20%20%20-%20%24b_i%24%3A%20%E6%A0%84%E9%A4%8A%E7%B4%A0%20%24i%24%20%E3%81%AE%201%20%E6%97%A5%E3%81%AE%E6%91%82%E5%8F%96%E9%87%8F%E3%81%AE%E4%B8%8A%E9%99%90%0A%20%20%20%20%20%20%20%20%20%20-%20%24c_j%24%3A%20%E5%95%86%E5%93%81%20%24j%24%20%E3%81%AE%E4%BE%A1%E6%A0%BC%0A%20%20%20%20%20%20%20%20%20%20-%20%24n_%7Bij%7D%24%3A%20%E5%95%86%E5%93%81%20%24j%24%20%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%A0%84%E9%A4%8A%E7%B4%A0%20%24i%24%20%E3%81%AE%E9%87%8F%0A%20%20%20%20%20%20%20%20-%20%E6%B1%BA%E5%AE%9A%E5%A4%89%E6%95%B0%0A%20%20%20%20%20%20%20%20%20%20-%20%24x_j%20%5Cin%20%5Cmathbb%7BR%7D_%7B%5Cgeq%200%7D%24%3A%20%E5%95%86%E5%93%81%20%24j%24%20%E3%82%92%E8%B3%BC%E5%85%A5%E3%81%99%E3%82%8B%E5%80%8B%E6%95%B0%0A%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bminimize%7D%20%26%20%5Csum_%7Bj%20%5Cin%20F%7D%20c_j%20x_j%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%26%20a_i%20%5Cleq%20%5Csum_%7Bj%20%5Cin%20F%7D%20n_%7Bij%7D%20x_j%20%5Cleq%20b_i%20%5C%20(%5Cforall%20i%20%5Cin%20N)%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20x_j%20%5Cgeq%200%20%5C%20(%5Cforall%20j%20%5Cin%20F)%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20ortools.math_opt.python%20import%20mathopt%0A%20%20%20%20import%20pyscipopt%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20return%20mathopt%2C%20pd%2C%20pyscipopt%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20%E5%AE%9F%E8%A1%8C%E4%B8%8D%E8%83%BD%E3%81%AE%E3%82%B1%E3%83%BC%E3%82%B9%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bmaximize%7D%20%26%20x_1%20%2B%20x_2%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%26%20x_1%20-%20x_2%20%5Cleq%20-1%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20-%20x_1%20%2B%20x_2%20%5Cleq%20-1%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20x_1%2C%20x_2%20%5Cgeq%200%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mathopt)%3A%0A%20%20%20%20_model%20%3D%20mathopt.Model()%0A%20%20%20%20_x1%20%3D%20_model.add_variable(lb%3D0)%0A%20%20%20%20_x2%20%3D%20_model.add_variable(lb%3D0)%0A%0A%20%20%20%20_model.add_linear_constraint(_x1%20-%20_x2%20%3C%3D%20-1)%0A%20%20%20%20_model.add_linear_constraint(-_x1%20%2B%20_x2%20%3C%3D%20-1)%0A%0A%20%20%20%20_model.maximize(_x1%20%2B%20_x2)%0A%0A%20%20%20%20_params%20%3D%20mathopt.SolveParameters(enable_output%3DTrue)%0A%20%20%20%20_result%20%3D%20mathopt.solve(_model%2C%20mathopt.SolverType.HIGHS%2C%20params%3D_params)%0A%0A%20%20%20%20_result.termination.reason%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20%E9%9D%9E%E6%9C%89%E7%95%8C%E3%81%AE%E3%82%B1%E3%83%BC%E3%82%B9%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bmaximize%7D%20%26%20x_1%20%2B%20x_2%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%26%20x_1%20-%20x_2%20%5Cgeq%20-1%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20-%20x_1%20%2B%20x_2%20%5Cgeq%20-1%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20x_1%2C%20x_2%20%5Cgeq%200%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mathopt)%3A%0A%20%20%20%20_model%20%3D%20mathopt.Model()%0A%20%20%20%20_x1%20%3D%20_model.add_variable(lb%3D0)%0A%20%20%20%20_x2%20%3D%20_model.add_variable(lb%3D0)%0A%0A%20%20%20%20_model.add_linear_constraint(_x1%20-%20_x2%20%3E%3D%20-1)%0A%20%20%20%20_model.add_linear_constraint(-_x1%20%2B%20_x2%20%3E%3D%20-1)%0A%0A%20%20%20%20_model.maximize(_x1%20%2B%20_x2)%0A%0A%20%20%20%20_params%20%3D%20mathopt.SolveParameters(enable_output%3DTrue)%0A%20%20%20%20_result%20%3D%20mathopt.solve(_model%2C%20mathopt.SolverType.HIGHS%2C%20params%3D_params)%0A%0A%20%20%20%20_result.termination.reason%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20%E5%AE%9F%E8%A1%8C%E4%B8%8D%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95(%E5%88%B6%E7%B4%84%E3%81%AE%E9%80%B8%E8%84%B1%E3%82%92%E8%A8%B1%E3%81%99%E3%83%A2%E3%83%87%E3%83%AB%E5%8C%96)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%E6%A0%84%E9%A4%8A%E7%B4%A0%E6%91%82%E5%8F%96%E9%87%8F%E5%88%B6%E7%B4%84%E3%81%AE%E9%80%B8%E8%84%B1%E3%82%92%E8%A8%B1%E3%81%99%E3%81%9F%E3%82%81%E3%81%AB%E6%91%82%E5%8F%96%E9%87%8F%E3%81%AE%E4%B8%8D%E8%B6%B3%E5%88%86%E3%81%A8%E8%B6%85%E9%81%8E%E5%88%86%E3%82%92%E8%A1%A8%E3%81%99%E6%B1%BA%E5%AE%9A%E5%A4%89%E6%95%B0%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B.%20%0A%0A%20%20%20%20%20%20%20%20-%20%24d_i%20%5Cin%20%5Cmathbb%7BR%7D_%7B%5Cgeq%200%7D%24%3A%20%E6%A0%84%E9%A4%8A%E7%B4%A0%20%24i%24%20%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E4%B8%8D%E8%B6%B3%E5%A4%89%E6%95%B0%0A%20%20%20%20%20%20%20%20-%20%24s_i%20%5Cin%20%5Cmathbb%7BR%7D_%7B%5Cgeq%200%7D%24%3A%20%E6%A0%84%E9%A4%8A%E7%B4%A0%20%24i%24%20%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E8%B6%85%E9%81%8E%E5%A4%89%E6%95%B0%0A%0A%20%20%20%20%20%20%20%20%E5%88%B6%E7%B4%84%E3%82%92%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B.%20%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20a_i%20-%20d_i%20%5Cleq%20%5Csum_%7Bj%20%5Cin%20F%7D%20n_%7Bij%7D%20x_j%20%5Cleq%20b_i%20%2B%20s_i%20%5C%20(%5Cforall%20i%20%5Cin%20N)%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%E7%9B%AE%E7%9A%84%E9%96%A2%E6%95%B0%E3%81%AB%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E9%80%B8%E8%84%B1%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B(%24M%24%20%E3%81%AF%E5%8D%81%E5%88%86%E5%A4%A7%E3%81%8D%E3%81%AA%E5%AE%9A%E6%95%B0).%20%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Ctext%7Bminimize%7D%20%5Csum_%7Bj%20%5Cin%20F%7D%20c_j%20x_j%20%2B%20M%20%5Csum_%7Bi%20%5Cin%20N%7D%20(d_i%20%2B%20s_i)%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%E7%B5%90%E6%9E%9C%2C%20%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E5%AE%9A%E5%BC%8F%E5%8C%96%E3%81%AB%E3%81%AA%E3%82%8B.%20%0A%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bminimize%7D%20%26%20%5Csum_%7Bj%20%5Cin%20F%7D%20c_j%20x_j%20%2B%20M%20%5Csum_%7Bi%20%5Cin%20N%7D%20(d_i%20%2B%20s_i)%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%26%20a_i%20-%20d_i%20%5Cleq%20%5Csum_%7Bj%20%5Cin%20F%7D%20n_%7Bij%7D%20x_j%20%5Cleq%20b_i%20%2B%20s_i%20%5C%20(%5Cforall%20i%20%5Cin%20N)%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20x_j%20%5Cgeq%200%20%5C%20(%5Cforall%20j%20%5Cin%20F)%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20%23%20https%3A%2F%2Fscmopt.github.io%2Fmanual%2F15mypulp.html%23multidict%25E9%2596%25A2%25E6%2595%25B0%0A%0A%20%20%20%20def%20multidict(d%3A%20dict)%3A%0A%20%20%20%20%20%20%20%20ret%20%3D%20%5Blist(d.keys())%5D%0A%20%20%20%20%20%20%20%20for%20k%2C%20arr%20in%20d.items()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20type(arr)%20is%20not%20list%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20arr%20%3D%20%5Barr%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20append_num%20%3D%201%20%2B%20len(arr)%20-%20len(ret)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20append_num%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ret%20%3D%20ret%20%2B%20%5B%7B%7D%20for%20_%20in%20range(append_num)%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20i%2C%20val%20in%20enumerate(arr)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ret%5Bi%20%2B%201%5D%5Bk%5D%20%3D%20val%0A%20%20%20%20%20%20%20%20return%20ret%0A%20%20%20%20return%20(multidict%2C)%0A%0A%0A%40app.cell%0Adef%20_(multidict)%3A%0A%20%20%20%20_I%2C%20_d%20%3D%20multidict(%7B1%3A%2080%2C%202%3A%20270%2C%203%3A%20250%2C%204%3A%20160%2C%205%3A%20180%7D)%0A%20%20%20%20_J%2C%20_M%2C%20_N%20%3D%20multidict(%7B1%3A%20%5B500%2C%20600%5D%2C%202%3A%20%5B800%2C%20500%5D%2C%203%3A%20%5B500%2C%20100%5D%7D)%0A%20%20%20%20print(_I%2C%20_d)%0A%20%20%20%20print(_J%2C%20_M%2C%20_N)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(multidict)%3A%0A%20%20%20%20F%2C%20c%2C%20n%20%3D%20multidict(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22CQPounder%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20360%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20556%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2039%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%2030%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%20147%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%2010%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%20221%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%202.4%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Big%20M%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20320%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20556%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2046%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%2026%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%2097%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%209%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%20142%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%202.4%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22FFilet%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20270%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20356%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2042%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%2014%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%2028%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%2076%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%200.7%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Chicken%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20290%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20431%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2045%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%2020%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%209%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%202%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%2037%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%200.9%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Fries%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20190%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20249%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2030%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%203%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%205%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%207%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%200.6%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Milk%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20170%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%20138%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2010%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%207%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%2080%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%202%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%20227%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22VegJuice%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Cal%22%3A%2069%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Carbo%22%3A%2017%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Protein%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitA%22%3A%20750%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22VitC%22%3A%202%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Calc%22%3A%2018%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Iron%22%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20return%20F%2C%20c%2C%20n%0A%0A%0A%40app.cell%0Adef%20_(multidict)%3A%0A%20%20%20%20N%2C%20a%2C%20b%20%3D%20multidict(%7B'Cal'%3A%20%5B2000%2C%203000%5D%2C%20'Carbo'%3A%20%5B300%2C%20375%5D%2C%20'Protein'%3A%20%5B50%2C%2060%5D%2C%20'VitA'%3A%20%5B500%2C%20750%5D%2C%20'VitC'%3A%20%5B85%2C%20100%5D%2C%20'Calc'%3A%20%5B660%2C%20900%5D%2C%20'Iron'%3A%20%5B6.0%2C%207.5%5D%7D)%0A%20%20%20%20return%20N%2C%20a%2C%20b%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20N%2C%20a%2C%20b%2C%20c%2C%20mathopt%2C%20n)%3A%0A%20%20%20%20model0%20%3D%20mathopt.Model()%0A%0A%20%20%20%20x1%20%3D%20%7B_j%3A%20model0.add_variable(lb%3D0.0%2C%20name%3Df%22x%5B%7B_j%7D%5D%22)%20for%20_j%20in%20F%7D%0A%20%20%20%20s1%20%3D%20%7B_i%3A%20model0.add_variable(lb%3D0.0%2C%20name%3Df%22s%5B%7B_i%7D%5D%22)%20for%20_i%20in%20N%7D%0A%20%20%20%20d1%20%3D%20%7B_i%3A%20model0.add_variable(lb%3D0.0%2C%20name%3Df%22d%5B%7B_i%7D%5D%22)%20for%20_i%20in%20N%7D%0A%0A%20%20%20%20for%20_i%20in%20N%3A%0A%20%20%20%20%20%20%20%20model0.add_linear_constraint(sum((n%5B_j%5D%5B_i%5D%20*%20x1%5B_j%5D%20for%20_j%20in%20F))%20%3E%3D%20a%5B_i%5D%20-%20d1%5B_i%5D)%0A%20%20%20%20%20%20%20%20model0.add_linear_constraint(sum((n%5B_j%5D%5B_i%5D%20*%20x1%5B_j%5D%20for%20_j%20in%20F))%20%3C%3D%20b%5B_i%5D%20-%20s1%5B_i%5D)%0A%0A%20%20%20%20_M%20%3D%209999%0A%20%20%20%20_objective%20%3D%20sum((c%5B_j%5D%20*%20x1%5B_j%5D%20for%20_j%20in%20F))%20%2B%20_M%20*%20sum((d1%5B_i%5D%20%2B%20s1%5B_i%5D%20for%20_i%20in%20N))%0A%20%20%20%20model0.minimize(_objective)%0A%0A%20%20%20%20_params%20%3D%20mathopt.SolveParameters(enable_output%3DTrue)%0A%20%20%20%20result1%20%3D%20mathopt.solve(model0%2C%20mathopt.SolverType.GSCIP%2C%20params%3D_params)%0A%20%20%20%20if%20result1.termination.reason%20!%3D%20mathopt.TerminationReason.OPTIMAL%3A%0A%20%20%20%20%20%20%20%20raise%20RuntimeError(f%22model%20failed%20to%20solve%3A%20%7Bresult1.termination%7D%22)%0A%20%20%20%20return%20d1%2C%20model0%2C%20result1%2C%20s1%2C%20x1%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20N%2C%20a%2C%20b%2C%20d1%2C%20n%2C%20result1%2C%20s1%2C%20x1)%3A%0A%20%20%20%20x1val%20%3D%20%7B_j%3A%20result1.variable_values()%5Bx1%5B_j%5D%5D%20for%20_j%20in%20F%7D%0A%20%20%20%20s1val%20%3D%20%7B_i%3A%20result1.variable_values()%5Bs1%5B_i%5D%5D%20for%20_i%20in%20N%7D%0A%20%20%20%20d1val%20%3D%20%7B_i%3A%20result1.variable_values()%5Bd1%5B_i%5D%5D%20for%20_i%20in%20N%7D%0A%0A%20%20%20%20for%20_i%20in%20N%3A%0A%20%20%20%20%20%20%20%20_info%20%3D%20%22%E6%AD%A3%E5%B8%B8%22%0A%20%20%20%20%20%20%20%20if%20sum(n%5B_j%5D%5B_i%5D%20*%20x1val%5B_j%5D%20for%20_j%20in%20F)%20%3C%20a%5B_i%5D%20-%20d1val%5B_i%5D%20or%20sum(n%5B_j%5D%5B_i%5D%20*%20x1val%5B_j%5D%20for%20_j%20in%20F)%20%3E%20b%5B_i%5D%20-%20s1val%5B_i%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_info%20%3D%20%22%E9%81%95%E5%8F%8D%22%0A%20%20%20%20%20%20%20%20print(f%22%5B%7B_info%7D%5D%E6%A0%84%E9%A4%8A%E7%B4%A0%20%7B_i%3A%3C7%7D%20%E6%91%82%E5%8F%96%E9%87%8F%20%7Bsum(n%5B_j%5D%5B_i%5D%20*%20x1val%5B_j%5D%20for%20_j%20in%20F)%3A%3E7.2f%7D%2C%20%E6%AD%A3%E5%B8%B8%E7%AF%84%E5%9B%B2%3A%20%5B%7Ba%5B_i%5D%3A%3E6.1f%7D%2C%20%7Bb%5B_i%5D%3A%3E6.1f%7D%5D%22)%0A%20%20%20%20return%20d1val%2C%20s1val%2C%20x1val%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20c%2C%20x1val)%3A%0A%20%20%20%20sum(c%5B_j%5D%20*%20x1val%5B_j%5D%20for%20_j%20in%20F)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(result1)%3A%0A%20%20%20%20result1.objective_value()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20%E9%80%B8%E8%84%B1%E6%9C%80%E5%B0%8F%E5%8C%96%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%E6%95%B4%E6%95%B0%E5%A4%89%E6%95%B0%E3%81%AE%E9%80%A3%E7%B6%9A%E5%A4%89%E6%95%B0%E5%8C%96%2C%20%E5%88%B6%E7%B4%84%E3%81%AE%E9%80%B8%E8%84%B1%E3%82%92%E3%82%B3%E3%82%B9%E3%83%88%E9%96%A2%E6%95%B0%E5%8C%96.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20N%2C%20a%2C%20b%2C%20c%2C%20n%2C%20pyscipopt)%3A%0A%20%20%20%20model1%20%3D%20pyscipopt.Model()%0A%0A%20%20%20%20x2%20%3D%20%7B_j%3A%20model1.addVar(vtype%3D%22C%22%2C%20lb%3D0.0)%20for%20_j%20in%20F%7D%0A%20%20%20%20s2%20%3D%20%7B_i%3A%20model1.addVar(vtype%3D%22C%22%2C%20lb%3D0.0)%20for%20_i%20in%20N%7D%0A%20%20%20%20d2%20%3D%20%7B_i%3A%20model1.addVar(vtype%3D%22C%22%2C%20lb%3D0.0)%20for%20_i%20in%20N%7D%0A%0A%20%20%20%20for%20_i%20in%20N%3A%0A%20%20%20%20%20%20%20%20model1.addCons(pyscipopt.quicksum((n%5B_j%5D%5B_i%5D%20*%20x2%5B_j%5D%20for%20_j%20in%20F))%20%3E%3D%20a%5B_i%5D%20-%20d2%5B_i%5D)%0A%20%20%20%20%20%20%20%20model1.addCons(pyscipopt.quicksum((n%5B_j%5D%5B_i%5D%20*%20x2%5B_j%5D%20for%20_j%20in%20F))%20%3C%3D%20b%5B_i%5D%20-%20s2%5B_i%5D)%0A%0A%20%20%20%20_M%20%3D%20999%20%23%20%E3%81%93%E3%81%93%E3%82%92%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%97%E9%81%8E%E3%81%8E%E3%82%8B%E3%81%A8%E8%A8%88%E7%AE%97%E6%99%82%E9%96%93%E3%81%8C%E8%82%A5%E5%A4%A7%E5%8C%96%E3%81%99%E3%82%8B.%20%0A%20%20%20%20_objective%20%3D%200%0A%20%20%20%20for%20_i%20in%20N%3A%0A%20%20%20%20%20%20%20%20_s2q%20%3D%20model1.addVar(vtype%3D%22C%22%2C%20lb%3D0.0)%0A%20%20%20%20%20%20%20%20_d2q%20%3D%20model1.addVar(vtype%3D%22C%22%2C%20lb%3D0.0)%0A%20%20%20%20%20%20%20%20model1.addCons(_s2q%20%3D%3D%20s2%5B_i%5D%20*%20s2%5B_i%5D)%0A%20%20%20%20%20%20%20%20model1.addCons(_d2q%20%3D%3D%20d2%5B_i%5D%20*%20d2%5B_i%5D)%0A%20%20%20%20%20%20%20%20_objective%20%2B%3D%20_s2q%20%2B%20_d2q%0A%20%20%20%20_objective%20%3D%20_M%20*%20_objective%20%2B%20pyscipopt.quicksum((c%5B_j%5D%20*%20x2%5B_j%5D%20for%20_j%20in%20F))%0A%20%20%20%20model1.setObjective(_objective%2C%20sense%3D%22minimize%22)%0A%0A%20%20%20%20model1.optimize()%0A%20%20%20%20return%20d2%2C%20model1%2C%20s2%2C%20x2%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20N%2C%20a%2C%20b%2C%20d2%2C%20model1%2C%20n%2C%20s2%2C%20x2)%3A%0A%20%20%20%20x2val%20%3D%20%7B_j%3A%20model1.getVal(x2%5B_j%5D)%20for%20_j%20in%20F%7D%0A%20%20%20%20s2val%20%3D%20%7B_i%3A%20model1.getVal(s2%5B_i%5D)%20for%20_i%20in%20N%7D%0A%20%20%20%20d2val%20%3D%20%7B_i%3A%20model1.getVal(d2%5B_i%5D)%20for%20_i%20in%20N%7D%0A%0A%20%20%20%20for%20_i%20in%20N%3A%0A%20%20%20%20%20%20%20%20_info%20%3D%20%22%E6%AD%A3%E5%B8%B8%22%0A%20%20%20%20%20%20%20%20if%20sum(n%5B_j%5D%5B_i%5D%20*%20x2val%5B_j%5D%20for%20_j%20in%20F)%20%3C%20a%5B_i%5D%20-%20d2val%5B_i%5D%20or%20sum(n%5B_j%5D%5B_i%5D%20*%20x2val%5B_j%5D%20for%20_j%20in%20F)%20%3E%20b%5B_i%5D%20-%20s2val%5B_i%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_info%20%3D%20%22%E9%81%95%E5%8F%8D%22%0A%20%20%20%20%20%20%20%20print(f%22%5B%7B_info%7D%5D%E6%A0%84%E9%A4%8A%E7%B4%A0%20%7B_i%3A%3C7%7D%20%E6%91%82%E5%8F%96%E9%87%8F%20%7Bsum(n%5B_j%5D%5B_i%5D%20*%20x2val%5B_j%5D%20for%20_j%20in%20F)%3A%3E7.2f%7D%2C%20%E6%AD%A3%E5%B8%B8%E7%AF%84%E5%9B%B2%3A%20%5B%7Ba%5B_i%5D%3A%3E6.1f%7D%2C%20%7Bb%5B_i%5D%3A%3E6.1f%7D%5D%22)%0A%20%20%20%20return%20d2val%2C%20s2val%2C%20x2val%0A%0A%0A%40app.cell%0Adef%20_(F%2C%20c%2C%20x2val)%3A%0A%20%20%20%20sum(c%5B_j%5D%20*%20x2val%5B_j%5D%20for%20_j%20in%20F)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(model1)%3A%0A%20%20%20%20model1.getObjVal()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20%E6%97%A2%E7%B4%84%E4%B8%8D%E6%95%B4%E5%90%88%E9%83%A8%E5%88%86%E7%B3%BB%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%E6%97%A2%E7%B4%84%E4%B8%8D%E6%95%B4%E5%90%88%E9%83%A8%E5%88%86%E7%B3%BB%20(irreducible%20Inconsistent%20Subsystem%3A%20IIS)%0A%0A%20%20%20%20%20%20%20%20-%20%E5%AE%9F%E8%A1%8C%E4%B8%8D%E5%8F%AF%E8%83%BD%0A%20%20%20%20%20%20%20%20-%20%E4%B8%8A%E4%B8%8B%E9%99%90%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E5%88%B6%E7%B4%84%E3%82%921%E3%81%A4%E9%99%A4%E3%81%8F%E3%81%A8%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%AA%E3%82%8B%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20%E6%B7%B7%E5%90%88%E5%95%8F%E9%A1%8C%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20-%20%E5%AE%9A%E6%95%B0%0A%20%20%20%20%20%20%20%20%20%20-%20%24I%24%3A%20%E5%8E%9F%E6%96%99%E3%81%AE%E9%9B%86%E5%90%88%0A%20%20%20%20%20%20%20%20%20%20-%20%24K%24%3A%20%E6%88%90%E5%88%86%E3%81%AE%E9%9B%86%E5%90%88%0A%20%20%20%20%20%20%20%20%20%20-%20%24p_i%24%3A%20%E5%8E%9F%E6%96%99%20%24i%24%20%E3%81%AE%E4%BE%A1%E6%A0%BC%0A%20%20%20%20%20%20%20%20%20%20-%20%24a_%7Bik%7D%24%3A%20%E5%8E%9F%E6%96%99%20%24i%24%20%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%88%90%E5%88%86%20%24k%24%20%E3%81%AE%E6%AF%94%E7%8E%87%0A%20%20%20%20%20%20%20%20%20%20-%20%24LB_k%24%3A%20%E8%A3%BD%E5%93%81%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%88%90%E5%88%86%20%24k%24%20%E3%81%AE%E6%AF%94%E7%8E%87%E3%81%AE%E4%B8%8B%E9%99%90%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Cvarepsilon%24%3A%20%E8%AA%A4%E5%B7%AE%E3%81%AE%202%20%E4%B9%97%E5%92%8C%E3%81%AE%E4%B8%8A%E9%99%90%0A%20%20%20%20%20%20%20%20-%20%E6%B1%BA%E5%AE%9A%E5%A4%89%E6%95%B0%0A%20%20%20%20%20%20%20%20%20%20-%20%24x_i%24%3A%20%E5%8E%9F%E6%96%99%20%24i%24%20%E3%81%AE%E5%90%AB%E6%9C%89%E6%AF%94%E7%8E%87%0A%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bminimize%7D%20%26%20%5Csum_%7Bi%20%5Cin%20I%7D%20p_i%20x_i%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%26%20%5Csum_%7Bi%20%5Cin%20I%7D%20x_i%20%3D%201%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20%5Csqrt%7B%5Cvarepsilon%5E2%20%5Csum_%7Bi%20%5Cin%20I%7D%20x_i%5E2%7D%20%5Cleq%20-LB_k%20%2B%20%5Csum_%7Bi%20%5Cin%20I%7D%20a_%7Bik%7D%20x_i%20%5Cquad%20(%5Cforall%20k%20%5Cin%20K)%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%20%26%20x_i%20%5Cgeq%200%20%5Cquad%20(%5Cforall%20i%20%5Cin%20I)%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(multidict)%3A%0A%20%20%20%20def%20make_data()%3A%0A%20%20%20%20%20%20%20%20a%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20(1%2C%201)%3A%200.25%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(1%2C%202)%3A%200.15%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(1%2C%203)%3A%200.2%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(2%2C%201)%3A%200.3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(2%2C%202)%3A%200.3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(2%2C%203)%3A%200.1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(3%2C%201)%3A%200.15%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(3%2C%202)%3A%200.65%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(3%2C%203)%3A%200.05%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(4%2C%201)%3A%200.1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(4%2C%202)%3A%200.05%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(4%2C%203)%3A%200.8%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20epsilon%20%3D%200.01%0A%20%20%20%20%20%20%20%20I%2C%20p%20%3D%20multidict(%7B1%3A%205%2C%202%3A%206%2C%203%3A%208%2C%204%3A%2020%7D)%0A%20%20%20%20%20%20%20%20K%2C%20LB%20%3D%20multidict(%7B1%3A%200.2%2C%202%3A%200.3%2C%203%3A%200.2%7D)%0A%20%20%20%20%20%20%20%20return%20I%2C%20K%2C%20a%2C%20p%2C%20epsilon%2C%20LB%0A%20%20%20%20return%20(make_data%2C)%0A%0A%0A%40app.cell%0Adef%20_(pyscipopt)%3A%0A%20%20%20%20def%20prodmix(I%2C%20K%2C%20a%2C%20p%2C%20epsilon%2C%20LB)%3A%0A%20%20%20%20%20%20%20%20%22%22%22prodmix%3A%20%20robust%20production%20planning%20using%20soco%0A%20%20%20%20%20%20%20%20Parameters%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20I%20-%20set%20of%20materials%0A%20%20%20%20%20%20%20%20%20%20%20%20K%20-%20set%20of%20components%0A%20%20%20%20%20%20%20%20%20%20%20%20a%5Bi%5D%5Bk%5D%20-%20%20coef.%20matrix%0A%20%20%20%20%20%20%20%20%20%20%20%20p%5Bi%5D%20-%20price%20of%20material%20i%0A%20%20%20%20%20%20%20%20%20%20%20%20LB%5Bk%5D%20-%20amount%20needed%20for%20k%0A%20%20%20%20%20%20%20%20Returns%20a%20model%2C%20ready%20to%20be%20solved.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%0A%20%20%20%20%20%20%20%20model%20%3D%20pyscipopt.Model()%0A%20%20%20%20%20%20%20%20x%20%3D%20%7Bi%3A%20model.addVar(vtype%3D'C'%2C%20lb%3D0.0)%20for%20i%20in%20I%7D%0A%20%20%20%20%20%20%20%20rhs%20%3D%20%7Bk%3A%20model.addVar(vtype%3D'C')%20for%20k%20in%20K%7D%0A%0A%20%20%20%20%20%20%20%20model.addCons(pyscipopt.quicksum(x%5Bi%5D%20for%20i%20in%20I)%20%3D%3D%201)%0A%0A%20%20%20%20%20%20%20%20for%20k%20in%20K%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20model.addCons(rhs%5Bk%5D%20%3D%3D%20-LB%5Bk%5D%20%2B%20pyscipopt.quicksum(a%5Bi%2C%20k%5D%20*%20x%5Bi%5D%20for%20i%20in%20I))%0A%20%20%20%20%20%20%20%20%20%20%20%20model.addCons(pyscipopt.quicksum(epsilon%20**%202%20*%20x%5Bi%5D%20*%20x%5Bi%5D%20for%20i%20in%20I)%20%3C%3D%20rhs%5Bk%5D%20*%20rhs%5Bk%5D)%0A%0A%20%20%20%20%20%20%20%20objective%20%3D%20pyscipopt.quicksum(p%5Bi%5D%20*%20x%5Bi%5D%20for%20i%20in%20I)%0A%20%20%20%20%20%20%20%20model.setObjective(objective%2C%20sense%3D%22minimize%22)%0A%0A%20%20%20%20%20%20%20%20return%20model%0A%20%20%20%20return%20(prodmix%2C)%0A%0A%0A%40app.cell%0Adef%20_(make_data%2C%20prodmix)%3A%0A%20%20%20%20_I%2C%20_K%2C%20_a%2C%20_p%2C%20_epsilon%2C%20_LB%20%3D%20make_data()%0A%20%20%20%20obj_list%20%3D%20%5B%5D%0A%20%20%20%20for%20_i%20in%20range(5)%3A%0A%20%20%20%20%20%20%20%20_epsilon%20%3D%20_i%20*%200.01%0A%20%20%20%20%20%20%20%20_model%20%3D%20prodmix(_I%2C%20_K%2C%20_a%2C%20_p%2C%20_epsilon%2C%20_LB)%0A%20%20%20%20%20%20%20%20_model.hideOutput()%0A%20%20%20%20%20%20%20%20_model.optimize()%0A%20%20%20%20%20%20%20%20obj_list.append(_model.getObjVal())%0A%0A%20%20%20%20print(obj_list)%0A%20%20%20%20return%20(obj_list%2C)%0A%0A%0A%40app.cell%0Adef%20_(obj_list%2C%20pd)%3A%0A%20%20%20%20import%20matplotlib%20as%20plt%0A%0A%20%20%20%20pd.Series(obj_list).plot()%0A%20%20%20%20return%20(plt%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
db803c2a278d2da578975f2e002de1b20802dcbacbf69e3ae619bae514617052