mosek使用记录

mosek

需求

求解mixed-integer problem

Introduction

优秀的数学优化求解器

官方网址:https://www.mosek.com/
其中,重要说明:

  1. 认证文件下载:https://docs.mosek.com/9.3/licensing/quickstart.html#i-don-t-have-a-license-file-yet
    按照要求放在指定的文件夹位置。python正常方法按照mosek包即可使用
  2. https://www.mosek.com/documentation/
    有比较比较多的使用说明,主要是两个API文档FusionAPIOptimizerAPI,一个是面向对象的一个是面向过程的用法,fusion更直观好用。尾页有一cookbook也可以更深入了解模型理论
    使用求解器首先要自己完成建模过程,分清楚三个要素:variable、constraint、cost

Study

FusionAPI整数线性规划的例题
mosek使用记录

from mosek.fusion import *
def main(args):
    # constraint的系数,每行指代一个不等式
	A = [[50.0, 31.0],
		 [3.0, -2.0]]
	# cost的系数
	c = [1.0, 0.64]
	with Model('milo1') as M:
		# 设置变量,名称x,数量为2,限制为非负整数。greaterThan和lessThan都是包含了=
		x = M.variable('x', 2, Domain.integral(Domain.greaterThan(0.0)))
		# Create the constraints
		# 50.0 x[0] + 31.0 x[1] <= 250.0
		# 3.0 x[0] - 2.0 x[1] >= -4.0
		M.constraint('c1', Expr.dot(A[0], x), Domain.lessThan(250.0))
		M.constraint('c2', Expr.dot(A[1], x), Domain.greaterThan(-4.0))
		# Set max solution time
		M.setSolverParam('mioMaxTime', 60.0)
		# Set max relative gap (to its default value)
		M.setSolverParam('mioTolRelGap', 1e-4)
		# Set max absolute gap (to its default value)
		M.setSolverParam('mioTolAbsGap', 0.0)
		# Set the objective function to (c^T * x)
		M.objective('obj', ObjectiveSense.Maximize, Expr.dot(c, x))
		# Solve the problem
		M.solve()
		# Get the solution values
		print('[x0, x1] = ', x.level())
		print("MIP rel gap = %.2f (%f)" % (M.getSolverDoubleInfo(
		"mioObjRelGap"), M.getSolverDoubleInfo("mioObjAbsGap")))

Practice

网上随便找一道有答案的自我验证例题
mosek使用记录

[未完待续]

上一篇:计算机网络-DNS(Domain Name System)


下一篇:.net core DbFirst 结合Mysql