<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nesting and Cutting Optimization</title>
	<atom:link href="http://optimalprograms.com/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://optimalprograms.com/blog</link>
	<description>Blog about the products of Optimal Programs SRL</description>
	<lastBuildDate>Sat, 19 May 2012 17:16:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Migrating to Real Cut 1D version 9</title>
		<link>http://optimalprograms.com/blog/2012/05/19/migrating-to-real-cut-1d-version-9/</link>
		<comments>http://optimalprograms.com/blog/2012/05/19/migrating-to-real-cut-1d-version-9/#comments</comments>
		<pubDate>Sat, 19 May 2012 17:16:22 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=45</guid>
		<description><![CDATA[In version 9 of the Real Cut 1D we have changed the order of columns for Demand parts. We did that in order to improve data exchange with Excel. If you previously saved your data in native files (with extension 1d) you dont have to do anything. Real Cut 1D knows how to load its [...]]]></description>
			<content:encoded><![CDATA[<p>In version 9 of the Real Cut 1D we have changed the order of columns for Demand parts. We did that in order to improve data exchange with Excel.</p>
<p>If you previously saved your data in native files (with extension 1d) you dont have to do anything. Real Cut 1D knows how to load its own files.</p>
<p>However, if you did saved your data in csv or excel files, you will have to modify them by reordering the columns.<br />
Here is what you have to do:</p>
<p>- open the csv or xls file in Excel.<br />
- move the angle1 and angle 2 columns at the right of the existing columns.<br />
- delete the empty columns 3 and 4 which have resulted as effect of moving columns with angles.<br />
- exchange the height column with quantity column.</p>
<p>Here is an example:</p>
<p>- csv file from version 8 or less:</p>
<p>Length;Height;Angle1;Angle2;Quantity;Material;Label<br />
1000;0;90;90;5;wood;john</p>
<p>2000;0;90;90;12;wood;mike</p>
<p>in version 9 this becomes:</p>
<p>Length;Quantity;Height;Material;LabelAngle1;Angle2<br />
1000;5,0;wood;john;90;90</p>
<p>2000;12;0;wood;mike;90;90</p>
<p>Pay a special attention to list separator. In some regions the separator is &#8220;,&#8221;. In some others is &#8220;;&#8221;. If the separator is incorrectly set you will get an error.<br />
You may change the separator from menu Start | Control panels | Region and language | Additional settings| List separator of the Windows 7.</p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2012/05/19/migrating-to-real-cut-1d-version-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fractional input in Real Cut 2D too</title>
		<link>http://optimalprograms.com/blog/2012/05/19/fractional-input-in-real-cut-2d-too/</link>
		<comments>http://optimalprograms.com/blog/2012/05/19/fractional-input-in-real-cut-2d-too/#comments</comments>
		<pubDate>Sat, 19 May 2012 16:05:32 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=43</guid>
		<description><![CDATA[now we have fractional inputs in Real Cut 2D starting with version 8 which can be downloaded from here: www.optimalprograms.com/realcut2d.htm Please read this post in order to see the details related to fractional inputs: http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/]]></description>
			<content:encoded><![CDATA[<p>now we have fractional inputs in Real Cut 2D starting with version 8 which can be downloaded from here:</p>
<p><a href="http://www.optimalprograms.com/realcut2d.htm" target="_self">www.optimalprograms.com/realcut2d.htm</a></p>
<p>Please read this post in order to see the details related to fractional inputs:</p>
<p><a href="http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/">http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2012/05/19/fractional-input-in-real-cut-2d-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fractional input in Simple Cutting Software</title>
		<link>http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/</link>
		<comments>http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/#comments</comments>
		<pubDate>Fri, 11 May 2012 15:33:14 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=32</guid>
		<description><![CDATA[Starting with version 2 of our Simple Cutting Software we have introduced an important feature: the ability to handle fractional values. For instance, instead of typing 100.5, you may do this more elegantly with 100 1/2 (please note that blank space between 100 and 1/2). Width, Height of parts and stock can be typed in [...]]]></description>
			<content:encoded><![CDATA[<p>Starting with version 2 of our Simple Cutting Software we have introduced an important feature: the ability to handle fractional values.</p>
<p>For instance, instead of typing 100.5, you may do this more elegantly with 100 1/2 (please note that blank space between 100 and 1/2).</p>
<p>Width, Height of parts and stock can be typed in as fractional values. Also, the parameters of the optimization can be fractional.</p>
<p>Here is a movie showing the new feature:</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/HfRelHczao4?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You cannot specify any value as fractional. For instance you cannot specify 100 1/3, because this means 100.33333333333&#8230; and in real-world you cannot cut with this precision.</p>
<p>So, all fractions will be rounded to some value. The rounding parameter is specified in Settings | Round all fractions to.</p>
<p>Rounding happens as follow:</p>
<p>- parts are rounded up (ex: 1/3 is rounded up to 1/2 &#8211; the actual value depends on the rounding parameter).</p>
<p>- stock pieces are rounded down (2/3 is rounded to 1/2).</p>
<p>- cutter thickness is rounded up.</p>
<p>- break size is rounded up.</p>
<p>- maximal cut length is rounded down.</p>
<p><strong>One more thing: You cannot mix fractional values with real values (containing the decimal symbol &#8220;.&#8221;). For instance you cannot specify both 100 1/2 and 510.34 ! Choose one option only and stick with it!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2012/05/11/fractional-input-in-simple-cutting-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi 64 bit example for Cut 2D X</title>
		<link>http://optimalprograms.com/blog/2012/05/11/64-bit-examples-for-delphi-xe2/</link>
		<comments>http://optimalprograms.com/blog/2012/05/11/64-bit-examples-for-delphi-xe2/#comments</comments>
		<pubDate>Fri, 11 May 2012 15:03:56 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=14</guid>
		<description><![CDATA[XE2 version of Delphi can finally generate 64bit applications. We have succeeded in creating a Delphi 64bit example-application for our 64bit version of the Cut2DX. Previously we have integrated our component in 64bit applications created with Visual Studio (C#, C++ and VB). Delphi XE2 IDE is a 32 bit application. Because of that you cannot install a [...]]]></description>
			<content:encoded><![CDATA[<p>XE2 version of Delphi can finally generate 64bit applications.</p>
<p>We have succeeded in creating a Delphi 64bit example-application for our 64bit version of the Cut2DX. Previously we have integrated our component in 64bit applications created with Visual Studio (C#, C++ and VB).</p>
<p>Delphi XE2 IDE is a 32 bit application. Because of that you cannot install a 64bit component in the Component Palette.  So, this time, you cannot drag the component as you did in the previous editions of Delphi. Instead, you have to manually create an instance of the component at the runtime.</p>
<p>So, here the are steps:</p>
<p>1. Make sure that 64bit edition was previously registered with regsvr32.exe (the one located in system32 folder!).</p>
<p>2. Create a VCL based application.</p>
<p>3. From Project Manager (located in the right side of the screen),  right click the Target Platforms, choose Add Platform | 64 bit Windows.</p>
<p>4. From menu Component select Import Component | Type library.</p>
<p>5. From the list of registered type libraries, select optimal2dx_64Lib, then next.</p>
<p>6. No need to specify a Palette page, because anyway the component will not appear there.</p>
<p>7. Add unit to the current project. Finish.</p>
<p>8. Add optimal2dx_64Lib_TLB to the list of units used the current project.</p>
<p>9. Declare a variable: cut2d64: TCut2DX.</p>
<p>10.  Create an instance of TCut2DX during the FormCreate event:<br />
cut2d64 := TCut2DX.Create(Form1);</p>
<p>11. Create 2 event handlers for OnFinish and OnProgress events. Add the declarations in the interface:</p>
<p><strong>procedure </strong>OnFinish(Sender: TObject);<br />
<strong>procedure </strong>OnProgress(Sender: TObject);</p>
<p>12. Implement them as you need:</p>
<p><strong>procedure </strong>TForm1.OnFinish(Sender: TObject);<br />
<strong>begin</strong><br />
&#8230;<br />
<strong>end</strong>;</p>
<p>13. Assign the handlers to the current instance. You may do this just after you have created the instance:</p>
<p>cut2d64.OnFinish := OnFinish;<br />
cut2d64.OnProgress := OnProgress;</p>
<p>14. Destroy the instance of TCut2DX during the OnClose event of the form:</p>
<p>cut2d64.Destroy;</p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2012/05/11/64-bit-examples-for-delphi-xe2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed test for 1d optimization</title>
		<link>http://optimalprograms.com/blog/2012/04/29/speed-test-for-1d-optimization/</link>
		<comments>http://optimalprograms.com/blog/2012/04/29/speed-test-for-1d-optimization/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 07:00:55 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=16</guid>
		<description><![CDATA[We have reduced the running time of 1d optimization for large data. Here is a test with RealCut1D which has to cut 174000 demand parts from 200000 inventory bars. The optimization took only 0.33 seconds, however in the end-user software (Real Cut 1D) few more seconds are needed to compute all statistics and to display [...]]]></description>
			<content:encoded><![CDATA[<p>We have reduced the running time of 1d optimization for large data. Here is a test with RealCut1D which has to cut 174000 demand parts from 200000 inventory bars.</p>
<p>The optimization took only 0.33 seconds, however in the end-user software (Real Cut 1D) few more seconds are needed to compute all statistics and to display the results.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/M-lR4vJ0hMg?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2012/04/29/speed-test-for-1d-optimization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About the cutting and nesting optimization problem</title>
		<link>http://optimalprograms.com/blog/2010/10/17/about-the-cutting-and-nesting-optimization-problem/</link>
		<comments>http://optimalprograms.com/blog/2010/10/17/about-the-cutting-and-nesting-optimization-problem/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 16:20:27 +0000</pubDate>
		<dc:creator>optimalprograms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://optimalprograms.com/blog/?p=9</guid>
		<description><![CDATA[The cutting optimization problem belongs to the class of Nondeterminist Polynomial Complete (NP-Complete) problems [1]. Other problems in this class are the Hamiltonian path, Travelling Salesman, Subset sum, Clique, Independent set, Graph colouring etc. All these problems have been deeply analyzed by a huge number of researchers, but no polynomial-time algorithm was discovered for them. This has a direct consequence over the [...]]]></description>
			<content:encoded><![CDATA[<p>The cutting optimization problem belongs to the class of <a href="http://en.wikipedia.org/wiki/NP-complete">Nondeterminist Polynomial Complete</a> (NP-Complete) problems [1]. Other problems in this class are the <a href="http://en.wikipedia.org/wiki/Hamiltonian_path_problem">Hamiltonian path</a>, <a href="http://en.wikipedia.org/wiki/Travelling_salesman_problem">Travelling Salesman</a>, <a href="http://en.wikipedia.org/wiki/Subset_sum_problem">Subset sum</a>, <a href="http://en.wikipedia.org/wiki/Clique_problem">Clique</a>, <a href="http://en.wikipedia.org/wiki/Independent_set_problem">Independent set</a>, <a href="http://en.wikipedia.org/wiki/Graph_coloring_problem">Graph colouring</a> etc. All these problems have been deeply analyzed by a huge number of researchers, but no polynomial-time algorithm was discovered for them. This has a direct consequence over the running time and the quality of the optimization.</p>
<p>A polynomial-time algorithm is that one whose running time is bounded by a polynomial function of its input size. For instance, if we have n = 1000 pieces to cut and the cutting algorithm would have the complexity O(n<sup>2</sup>), then the running time would have been directly and linear proportional to 1000<sup>2</sup> which is (10<sup>6</sup>) units of time. Assuming that our computers can perform 10<sup>9</sup> operations per second, the cutting optimization algorithm would run in less than a fraction of a second. Sadly, this is not the case for the cutting optimization problem. There is no such fast algorithm for solving it.</p>
<p>The only perfect algorithm for solving the cutting optimization problem is an exponential one. An exponential algorithm will run in an exponential amount of time (2<em><sup>n</sup></em>, 3<em><sup>n</sup></em>, <em>n</em>! &#8211; where <em>n</em> is the number of pieces to be optimized). Thus, even for small instances (lets say 1000 pieces) an exponential algorithm will run as follows:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="100%" valign="top">
<ul>
<li>if the complexity is 2<sup>n</sup> , then the total number of operations is 2<sup>1000</sup> which can be approximated by 10<sup>300</sup>. Knowing that our computers can perform 10<sup>9</sup> operations / second we need 10<sup>291</sup> second to run the algorithm. One year has about 10<sup>8</sup> seconds. This means that our algorithm would run in 10<sup>283</sup> years. This is a huge value compared to the age of the universe which is only 10<sup>9</sup> years.</li>
</ul>
<ul>
<li>if the complexity is 3<sup>n</sup> , then the total number of operations is 3<sup>1000</sup> which can be approximated by 10<sup>477</sup>.</li>
</ul>
<ul>
<li>if the complexity is n! , then the total number of operations is 1000! which can be approximated by 10<sup>2567</sup>.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>These algorithms run in an impressive number of years. Even if we put all computers in the world to solve the problem in parallel we still don&#8217;t get a significant improvement in speed.</p>
<p>This is why another possibility (which is employed by our software too) is to use <a href="http://en.wikipedia.org/wiki/Heuristics"><em>heuristics</em></a> or approximation algorithms. A heuristic is an algorithm which is fast and returns a good solution (often the best one) of the problem. However,<strong>there is no guarantee</strong> that the obtained solution is the optimal one.</p>
<p>An important parameter of the software is the <a href="http://www.optimalprograms.com/help/optimization2dx/files/optimization_level.htm">OptimizationLevel</a>. This will basically tell how many configurations are explored before the best found solutions is outputted. If you set the <a href="http://www.optimalprograms.com/help/optimization2dx/files/optimization_level.htm">OptimizationLevel</a> to very low value you will obtain a solution very fast. But the quality of the solution might be not so good. If you set the <a href="http://www.optimalprograms.com/help/optimization2dx/files/optimization_level.htm">OptimizationLevel</a> to very high value you will obtain a good solution but not so fast. Thus, one must employ a trade-off between the quality of the solutions and the running time.</p>
<p><strong>References</strong></p>
<p>[1].      Garey, M.R., Johnson D.S., Computers and Intractability: A Guide to NP-completeness, Freeman &amp; Co, San Francisco, USA, 1979.</p>
]]></content:encoded>
			<wfw:commentRss>http://optimalprograms.com/blog/2010/10/17/about-the-cutting-and-nesting-optimization-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.270 seconds -->

