// // Copyright: Copyright (c) MOSEK ApS, Denmark. All rights reserved. // // File: midual1.cs // // Purpose: Demonstrates how to compute dual values with // respect to a fixed integer solution for a MIO problem. // // minimize 500 s1 + 300 s2 + 10 x1 + 14 x2 // subject to x1 + x2 >= 100 // 0 <= x1 <= 70 s1 // 0 <= x2 <= 80 s2 // s1, s2 - binary // using System; using mosek.fusion; namespace mosek.fusion.example { public class mico1 { public static void Main(string[] args) { /* M is the initial mixed-integer model */ using (Model M = new Model("midual1")) { Variable x = M.Variable("x", 2, Domain.GreaterThan(0)); Variable s = M.Variable("s", 2, Domain.Binary()); M.Objective(ObjectiveSense.Minimize, Expr.Add(Expr.Dot(new double[]{10,14}, x), Expr.Dot(new double[]{500,300}, s))); M.Constraint("demand", Expr.Sum(x), Domain.GreaterThan(100)); M.Constraint("production", Expr.Sub(x, Expr.MulElm(new double[]{70,80}, s)), Domain.LessThan(0)); M.Solve(); if (M.GetProblemStatus() != ProblemStatus.PrimalFeasible) throw new System.Exception("Unsuitable problem status, exiting"); Console.WriteLine("x = {0}, {1}", x.Level()[0], x.Level()[1]); /* F is the continuous fixed model */ using (Model F = M.GetFixedModel()) { F.Solve(); if (F.GetProblemStatus() != ProblemStatus.PrimalAndDualFeasible) throw new System.Exception("Unsuitable problem status, exiting"); Constraint demand = F.GetConstraint("demand"); Constraint production = F.GetConstraint("production"); Variable xfix = F.GetVariable("x"); Console.WriteLine("xfix = {0}, {1}", xfix.Level()[0], xfix.Level()[1]); Console.WriteLine("demand dual = {0}", demand.Dual()[0]); Console.WriteLine("production dual = {0}, {1}", production.Dual()[0], production.Dual()[1]); } } } } }