Click here to Skip to main content
15,881,455 members
Articles / Programming Languages / C#

Reusable dynamic programming with C# generics

Rate me:
Please Sign up or sign in to vote.
4.87/5 (18 votes)
24 Jul 200616 min read 76.2K   827   91  
Dynamic programming is a mathematical optimization technique. Generics are used to provide a reusable algorithm.
using System;
using System.Collections.Generic;
using System.Text;

namespace AndrewTweddle.ORToolkit.DynamicProgramming.StateCentric
{
    public class StateCentricDynamicProgram<TState, TDecision>
        : DynamicProgramBase<TState, TDecision> 
        where TState : class, IState<TDecision>
    {
        public SolutionNodeStorageType SolutionStorageType
        {
            get { return GetSolutionStorageType(); }
            set { SetSolutionStorageType(value); }
        }

        protected override IEnumerable<TDecision> GenerateDecisions(
            TState state)
        {
            return state.GenerateDecisions();
        }
         
        protected override TState GenerateNewState(
            TState state, TDecision decision, int stage)
        {
            return state.GenerateNewState(decision, stage) as TState;
        }

        protected override BranchStatus GetBranchStatus(
            TState state, int stage)
        {
            return state.GetBranchStatus(stage);
        }

        protected override double GetDecisionValue(TState priorState,
            TDecision decision, int stage)
        {
            return priorState.GetDecisionValue(decision, stage);
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Architect Dariel Solutions
South Africa South Africa
Andrew Tweddle started his career as an Operations Researcher, but made the switch to programming in 1997. His current programming passions are Powershell and WPF.

He has worked for one of the "big 4" banks in South Africa as a software team lead and an architect, at a Dynamics CRM consultancy and is currently an architect at Dariel Solutions working on software for a leading private hospital network.

Before that he spent 7 years at SQR Software in Pietermaritzburg, where he was responsible for the resource planning and budgeting module in CanePro, their flagship product for the sugar industry.

He enjoys writing utilities to streamline the software development and deployment process. He believes Powershell is a killer app for doing this.

Andrew is a board game geek (see www.boardgamegeek.com) with a collection of over 190 games! He also enjoys digital photography, camping and solving puzzles - especially Mathematics problems.

His Myers-Briggs personality profile is INTJ.

He lives with his wife, Claire and his daughters Lauren and Catherine in Johannesburg, South Africa.

Comments and Discussions