June, 2009

Posts
  • Nathan Brixius

    Solver Foundation LINQ to SQL example

    • 1 Comments

    Erwin, a modeling consultant and top Solver Foundation user, encountered some problems trying to do two-way data binding using DataTable objects.  There are more details on this discussion thread.  Ross, a member of the Solver Foundation team, was kind enough to code up a workaround for Erwin's example.  In addition to this CS file, you will need to create a new DBML file called SampleDataContext, as I described in a previous post.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data;
    using System.Data.OleDb;
    using System.Data.Linq;
    using System.Text;
    using Microsoft.SolverFoundation.Services;
    using System.IO;
     
    namespace OML1
    {
        class Test
        {
            static void Main(string[] args)
            {
                Test t = new Test();
                t.Solve();
            }
     
            // Holds the OML model
            string strModel = @"Model[
                  Parameters[Sets,I],
                  Parameters[Reals,p[I]],
     
                  Decisions[Reals[0,Infinity],x[I]],
     
                  Constraints[
                     Foreach[{i,I}, x[i]==p[i]]
                  ]
               ]";
     
     
            //  SFS
            SolverContext context;
            SampleDataContext data;
     
     
            //  Constructor
            public Test()
            {
                context = SolverContext.GetContext();
                data = new SampleDataContext("Data Source=Sql_server_name;Initial Catalog=DataPartitionAllocation20_5;Integrated Security=True");
                context.DataSource = data;
            }
     
     
            // Solve the problem
            public void Solve()
            {
                context.LoadModel(FileFormat.OML, new StringReader(strModel));
     
                Parameter p = context.CurrentModel.Parameters.First(q => q.Name == "p");
                p.SetBinding(data.P, "value", new string[] { "index" });
     
                Decision x = context.CurrentModel.Decisions.First(d => d.Name == "x");
                x.SetBinding(data.X, "value", new string[] { "index" }); 
     
                Solution solution = context.Solve();
                Console.Write("{0}", solution.GetReport());
     
                context.PropagateDecisions();
     
            }
     
        }
     
    }
    
Page 1 of 1 (1 items)