Project

General

Profile

Fabric Optimisation

Roller, Pleated and Roman fabrics can be optimised for fabric usage in the system.

Blind Type
Fabric calculator = ‘Width or Drop’

There was an issue with fabric optimisation if the fabric calculator = ‘Width or Drop’.
A full review of the optimisation algorithm has been carried out and it seems to work properly now.
The following rules apply.
As you can see, it is extremely complicated.

The fabric has a ‘Width’ calculator:
Optimisation pieces rotation is not allowed.
The optimisation is independent of the ‘Fabric -> Fabric Optimise One Direction’ flag.
If ‘Order Detail -> Drop Man Size’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Horizontal Join’ = FALSE then the detail will be excluded from the optimisation routine.
If ‘Order Detail -> Width Man’ more than ‘Fabric -> Roll Length’ then this detail will be excluded from the Optimisation routine.
If ‘Order Detail -> Drop Man’ less or equal to ‘Fabric -> Roll Width’ then this detail will be located on the fabric roll as usual.
If ‘Order Detail -> Drop Man’ more than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Horizontal Join’ = TRUE then this detail will be split to separate pieces and each piece will be optimised separately.
We sort items in descending width order; we locate the first piece to the top left corner on the fabric roll; we try to fit the next piece to the right of the first piece; if it doesn’t fit – we locate it to the bottom of the first piece, in the next case – to the right of the first piece etc.

The fabric has ‘Drop’ calculator:
Optimisation pieces rotation is not allowed.
The optimisation is independent of the ‘Fabric -> Fabric Optimise One Direction’ flag.
If ‘Order Detail -> Width Man’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Vertical Join’ = FALSE then this detail will be excluded from the Optimisation routine.
If ‘Order Detail -> Drop Man’ is greater than ‘Fabric -> Roll Length’ then this detail will be excluded from the Optimisation routine.
If ‘Order Detail -> Width Man’ is less or equal to ‘Fabric -> Roll Width’ then this detail will be located on the fabric roll as normal.
If ‘Order Detail -> Width Man’ is more than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Vertical Join’ = TRUE then this detail will be split into separate pieces and each piece will be optimised separately.
We sort items in descending drop order; we locate the first piece to the top left corner on the fabric roll; we try to fit the next piece to the right of the first piece; if it doesn’t fit – we locate it to the bottom of the first piece, in the next case – to the right of the first piece etc.

The fabric has a calculator ‘Width or Drop’:
Optimisation pieces rotation is allowed. The optimisation piece is turnable only if ‘Fabric -> Fabric Optimise One Direction’ = FALSE.
If both ‘Order Detail -> Width Man’ and ‘Order Detail -> Drop Man’ are greater than ‘Fabric -> Roll Width’ and both ‘Blind Type -> Allow Vertical Join’ = FALSE and ‘Blind Type -> Allow Horizontal Join’ = FALSE then this detail will be excluded from Optimisation routine.
If ‘Order Detail -> Drop Man’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Horizontal Join’ = FALSE then this detail will be excluded from the Optimisation routine.
If ‘Order Detail -> Width Man’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Vertical Join’ = FALSE then this detail will be excluded from the Optimisation routine.
If ‘Order Detail -> Width Man’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Vertical Join’ = TRUE then this detail will be split into separate pieces and each piece will be optimised separately.
If ‘Order Detail -> Drop Man’ is greater than ‘Fabric -> Roll Width’ and ‘Blind Type -> Allow Horizontal Join’ = TRUE then this detail will be split into separate pieces and each piece will be optimised separately.
In all other cases, this detail will be located on the fabric roll as normal.
The optimisation is dependent on ‘Fabric -> Fabric Optimise One Direction’ flag.
If ‘Fabric -> Fabric Optimise One Direction’ = TRUE:
We take all Optimisation details and perform optimisation by width without separate pieces rotation.
We store the Width Optimisation result.
We rotate all Optimisation details and perform optimisation by drop without separate pieces rotation.
We store Drop Optimisation result.
We record the best Optimisation result only in the database.
The optimisation is dependent on ‘Fabric -> Fabric Optimise One Direction’ flag.
If ‘Fabric -> Fabric Optimise One Direction’ = FALSE:
All details are turnable here as ‘Fabric -> Fabric Optimise One Direction’ = FALSE.
We take each detail and apply the following logic to it

if ((Optimisation Piece Drop < Fabric Roll Width) and (Optimisation Piece Width < Fabric Roll Width)) then
if (Optimisation Piece Drop > Optimisation Piece Width) then
we rotate this piece
else
we don’t rotate this piece
else
if ((Optimisation Piece Drop < Optimisation Piece Width) and (Optimisation Piece Width < Fabric Roll Width)) then we don’t rotate this piece
else
if ((Optimisation Piece Width < Optimisation Piece Drop) and (Optimisation Piece Drop < Fabric Roll Width)) then we don’t rotate this piece
else
if (Optimisation Piece Drop < Optimisation Piece Width) then
we rotate this piece
else
we don’t rotate this piece

We sort the items in descending width order; we locate the first piece in the top left corner on the fabric roll;
we try to fit the next piece to the right of the first piece; if it doesn’t fit – we locate it at the bottom of the first piece, in the next case – to the right of the first piece etc.

We have the following possibilities, so the logic covers the following.

Op piece width < fabric roll width
Op piece drop < fabric roll width
Op piece width < Op piece drop
Rotate

Op piece width < fabric roll width
Op piece drop < fabric roll width
Op piece width > Op piece drop
Do not rotate

Op piece width < fabric roll width
Op piece drop > fabric roll width
Op piece width > Op piece drop
Cannot happen

Op piece width < fabric roll width
Op piece drop > fabric roll width
Op piece width < Op piece drop
Cannot happen

Op piece width > fabric roll width
Op piece drop > fabric roll width
Op piece width > Op piece drop
Cannot happen

Op piece width > fabric roll width
Op piece drop > fabric roll width
Op piece width < Op piece drop
Cannot happen

Op piece width > fabric roll width
Op piece drop < fabric roll width
Op piece width < Op piece drop
Cannot happen

Op piece width > fabric roll width
Op piece drop < fabric roll width
Op piece width > Op piece drop
Rotate

Fabric Optimisation Cutting Sheet

There is a new parameter called ‘Manual Fabric Cut Optimisation’.
This is required because when the fabric is cut manually, it is cut right across the roll width, and this has an impact on the optimisation routine.

The new Fabric Optimisation routine has been integrated into Blindata but we didn’t implement two additional routines: Splitting of Optimisation by Roll Length and Fabric Off Cuts.
These routines are separate from old Fabric Optimisation and will be added after the new Fabric Optimisation routine has been fully tried and tested.

To enable this, you must first make sure that the ‘Optimisation’ flag is switched on in the stock record.
You will also need to make sure that all calculators and roll widths are set up properly for stock records.

Stock Items > General

Stock Items > Regular PO Options

There are two relevant fields here:

Fabric Optimise: this must be switched on if you are going to optimise fabric.
Fabric Optimise One Direction: if a fabric calculator is set to ‘Width or Drop’, this means it can be turned.
However, you may only want to turn a fabric the same way for an entire order, in which case this must be switched on.

Window Blind Amend > Blind Details > Optimisation

The optimisation routine can be run in this form:

Select relevant dates, and if necessary, blind types, suppliers and specific fabrics, and then click ‘Start’:

Once the routine has been run, statistics will appear in the ‘Optimisation Information’ part of the form.

Please note: there is also a button for selecting ‘Hardware Optimisation’, which is useful for working out the most efficient way to cut headrails, tubes etc for specific lengths of stock
You can then preview the results in a diagrammatic format by clicking on ‘Preview’, but please note this is not to scale.

Individual orders can also be optimised by using the ‘Optimise’ button in the order form.
It is also possible to optimise the records in the order automatically if ‘Optimise Fabric At Order Entry’ is switched on in the relevant blind type:

The end result of doing the fabric optimisation is that the stock usage is recalculated in the bill of materials.
If there is more than one blind on the order or orders that are being optimised, and the fabric can be optimised, then the quantity is recalculated and held against the first available blind in that optimisation routine.
The detail line for that order is also flagged as being optimised:

If any blind in that optimisation run is amended, then all the blinds in that run will be flagged as not optimised and stock will be recalculated as it was originally.

Fabric Optimisation Cutting Sheet

There is a new parameter called ‘Manual Fabric Cut Optimisation’.
This is required because when the fabric is cut manually, it is cut right across the roll width, and this has an impact on the optimisation routine.
The new Fabric Optimisation routine has been integrated into Blindata but we didn’t implement two additional routines: Splitting of Optimisation by Roll Length and Fabric Off Cuts.