Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

## Tree [r11] / History

File Date Author Commit
Calculator Executable Example 2008-10-31 iim [r11] Version 1.1.3
Documentation 2008-10-31 iim [r11] Version 1.1.3
IiM Binaries 2008-10-31 iim [r11] Version 1.1.3
IiM Calculator Source 2008-10-31 iim [r11] Version 1.1.3
IiM Library Source 2008-10-31 iim [r11] Version 1.1.3
Changelog.txt 2008-10-31 iim [r11] Version 1.1.3
Notices.txt 2008-10-31 iim [r11] Version 1.1.3
ReadMe.txt 2008-10-31 iim [r11] Version 1.1.3

```What is IiM ?

IiM , Intelligent Inventory Management, is a class library providing services of inventory management, this includes:

1.	Forecast of demand according to sales history.
2.	Calculation of economic inventory level for perishable products.
4.	Automatic management - daemon which automaticly maintain the inventory.

What special in IiM ?

1.	Optimized Calculation of Economic Order Quantity, this what determine the optimal economical stock level.
Why the calculation is optimized ?
A.	Calculation not ignoring the the essential factor of the product spoilage (if product is perishable).
B.	Calculation considering possible product discounts.
C.	We consider different practical restrictions which classical module is ignoring such as : Limitation of product's quantity in single order, for example if maximal quantity in one order is 1000 in order to get 2000 units you need to pay double order cost;Lead time of a product;Inventory space limitations
D.	Also algorithm considers money values loss factors as intercept which stock owner can get from investing money in other channels, change in index
E.	Suppliers discount per quantity considerations.
F.	Preserving safety stock in order to avoid backorders and maintain predefined service level, this helps to keep satisfied clients ?.

2.	IiM provide successful forecast of future product estimated sell's.
Forecast module considering: sales tendencies,seasonal factors,
ignoring unusual spikes.

3.	 IiM provides service of convenient access SQL data base(which can be easily replaced by any other data access type).

4. 	IiM consist of 5 independent modules/layers:
A. Forecast.
B. Economic Order Calculation.
C. Data Access.
D. Data Types.
E. Linear regression.
So you can take and use each of this modules "out of context", only by adding reference to the appropriate dll.
Moreover it is possible easily to replace each module without changing any other layers.

Short Description of IiM algorithm:

Stage 1

Getting data from data base :

1.
 Unit cell price
 Cost to order of number of units
 Daily holding cost
 Annual interest
 Consumer price index
 Spoilage data
 Product discounts data
 Discount per quantity data
 Service level
 Maximal number of units which can be kept in stock
2. Sails history of a product.

Stage 2

Forecast future demand using Simulated Annealing algorithm.

Stage 3

Estimate holding function, considering the cumulative spoilage of a product, cumulative discounts, interest, value loss, holding cost.
Algorithm using linear regression in order to estimate the holding function.

Stage 4

Estimate order function, considering the order cost and the maximal items quantity in each order.
Algorithm using linear regression in order to estimate the order function.

Stage 5

Calculate economic order quantity, considering: holding function, order function and product price.

Stage 6

Check if it is profitable to use discount per quantity.

Stage 7
Calculate safety stock.

Stage 8

Calculate  ROP.

Stage 9

Update Data Base.

Algorithm Known limitations:
- No support for back order, we used safety stock with service level to prevent back order.
- Product cant be spoiled 100% in the first day.
- Holding cost > 0.

This project is credited to the Academic college of Tel Aviv - Yaffo - Israel,
With special thanks to our project supervisor: Dr. Amir Kirsh.

Store ID: 2
User Name: alex

And then you can download Binary Libraries and source files with the API to make your own changes...
Please give us feedback in the forums or email us at The.IiM.Project@gmail.com

How To use IiM Source?

First of all you can find detailed description IiM_API_Documentation.
You can also read the following basic examples:

#################################################################################        				Examples
#################################################################################
//store id which appears in data base
int db_store_id = 2;

//product id which appears in data base
int db_product_id = 1;

//variable which will contain the estimated demand of a product
int estimatedDemand;

//create an istance of a iim
IiM_Engine iim = new IiM_Engine(db_store_id);

//start iim daemon which will automaticly manage for you economic inventory level for each product
iim.StartDaemonRun();

//Examples how to work with data base:

//accsess to product data
Product product = iim.DAL.GetProductData(db_product_id);

System.Console.WriteLine("Economic Order Quantity of product " + product.ProductId + " is " + product.EOQ);

//update any property of a product
product.MaxCapacity = 10000;

//update the changes in data base
iim.DAL.UpdateProductInDB(product);

//Example of using of forecast module
estimatedDemand = iim.CalcEstimatedSalesDemand(product.ProductId);
System.Console.WriteLine("Estimated daily demand of product " + product.ProductId + " is " + estimatedDemand);

//force iim to perfrom recalculation of: estimated demand ,EOQ , ROP , safety stock etc ...
iim.ProccessProduct(product.ProductId);

//synchronize  with data base
product = iim.DAL.GetProductData(db_product_id);

System.Console.WriteLine("New Economic Order Quantity of product " + product.ProductId + " is " + product.EOQ);

//force iim to perfrom recalculation of: estimated demand ,EOQ , ROP , safety stock , for ALL products of the store.
iim.ProccessAllProducts();

Product[] all_store_products = iim.DAL.GetAllProducts();

foreach (Product currProduct in all_store_products)
{
System.Console.WriteLine("EOQ of product " + currProduct.ProductId + " is " + currProduct.EOQ);
}