solvers: cover the sequential linear solver on a large model
Add ResourceDepletion.fods, an original 100-period depletable-resource model. It maximizes the sum over periods of discount^t times (2*sqrt(extraction) minus a cost that rises as the stock falls, cost*extraction/stock), choosing the extraction path B10:B109. The stock column cascades, so each period's choice changes every later period, and the remaining-stock column must stay non-negative throughout. The starting path scores about 29.36 and the best known optimum, found with an external gradient solver, is about 63.78. The swarm solver cannot handle a model of this dimension and returns no solution. The sequential linear solver loads it, stays feasible, and improves the objective, which is what the test checks. The time limit is kept short and only progress is checked, so the test does not depend on machine speed. Also raise the iteration cap in the solver from a fixed small number to a high safety limit, so the time budget and the convergence test decide when to stop. Smaller models still stop on convergence well before the limit, so their behaviour is unchanged. Signed-off-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> Change-Id: I4102c2ccb921888881179b23e305d652ceca86c3 Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/4660 Tested-by: Jenkins CPCI <releng@collaboraoffice.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com> (cherry picked from commit 06e03222b6a4e58d07df409d3f86deb263e444a2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208340 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
This commit is contained in:
committed by
Xisco Fauli
parent
d5e094de9b
commit
17d713fdd4
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.spreadsheet">
|
||||
<office:body>
|
||||
<office:spreadsheet>
|
||||
<table:table table:name="Sheet1">
|
||||
<table:table-column table:number-columns-repeated="5"/>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>periods</text:p></table:table-cell><table:table-cell office:value-type="float" office:value="100"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>rate</text:p></table:table-cell><table:table-cell office:value-type="float" office:value="0.05"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>stock</text:p></table:table-cell><table:table-cell office:value-type="float" office:value="100"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>discount</text:p></table:table-cell><table:table-cell table:formula="of:=1/(1+[.B2])" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>cost</text:p></table:table-cell><table:table-cell office:value-type="float" office:value="1"/></table:table-row>
|
||||
<table:table-row><table:table-cell table:number-columns-repeated="2"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>objective</text:p></table:table-cell><table:table-cell table:formula="of:=SUM([.D10:.D109])" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell table:number-columns-repeated="2"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="string"><text:p>t</text:p></table:table-cell><table:table-cell office:value-type="string"><text:p>extract</text:p></table:table-cell><table:table-cell office:value-type="string"><text:p>stock</text:p></table:table-cell><table:table-cell office:value-type="string"><text:p>utility</text:p></table:table-cell><table:table-cell office:value-type="string"><text:p>remaining</text:p></table:table-cell></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="0"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.B3]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C10]<=0;0;[.B4]^[.A10]*(2*SQRT([.B10])-[.B5]*[.B10]/[.C10]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C10]-[.B10]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="1"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E10]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C11]<=0;0;[.B4]^[.A11]*(2*SQRT([.B11])-[.B5]*[.B11]/[.C11]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C11]-[.B11]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="2"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E11]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C12]<=0;0;[.B4]^[.A12]*(2*SQRT([.B12])-[.B5]*[.B12]/[.C12]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C12]-[.B12]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="3"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E12]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C13]<=0;0;[.B4]^[.A13]*(2*SQRT([.B13])-[.B5]*[.B13]/[.C13]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C13]-[.B13]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="4"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E13]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C14]<=0;0;[.B4]^[.A14]*(2*SQRT([.B14])-[.B5]*[.B14]/[.C14]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C14]-[.B14]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="5"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E14]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C15]<=0;0;[.B4]^[.A15]*(2*SQRT([.B15])-[.B5]*[.B15]/[.C15]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C15]-[.B15]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="6"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E15]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C16]<=0;0;[.B4]^[.A16]*(2*SQRT([.B16])-[.B5]*[.B16]/[.C16]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C16]-[.B16]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="7"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E16]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C17]<=0;0;[.B4]^[.A17]*(2*SQRT([.B17])-[.B5]*[.B17]/[.C17]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C17]-[.B17]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="8"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E17]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C18]<=0;0;[.B4]^[.A18]*(2*SQRT([.B18])-[.B5]*[.B18]/[.C18]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C18]-[.B18]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="9"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E18]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C19]<=0;0;[.B4]^[.A19]*(2*SQRT([.B19])-[.B5]*[.B19]/[.C19]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C19]-[.B19]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="10"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E19]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C20]<=0;0;[.B4]^[.A20]*(2*SQRT([.B20])-[.B5]*[.B20]/[.C20]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C20]-[.B20]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="11"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E20]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C21]<=0;0;[.B4]^[.A21]*(2*SQRT([.B21])-[.B5]*[.B21]/[.C21]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C21]-[.B21]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="12"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E21]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C22]<=0;0;[.B4]^[.A22]*(2*SQRT([.B22])-[.B5]*[.B22]/[.C22]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C22]-[.B22]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="13"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E22]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C23]<=0;0;[.B4]^[.A23]*(2*SQRT([.B23])-[.B5]*[.B23]/[.C23]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C23]-[.B23]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="14"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E23]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C24]<=0;0;[.B4]^[.A24]*(2*SQRT([.B24])-[.B5]*[.B24]/[.C24]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C24]-[.B24]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="15"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E24]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C25]<=0;0;[.B4]^[.A25]*(2*SQRT([.B25])-[.B5]*[.B25]/[.C25]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C25]-[.B25]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="16"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E25]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C26]<=0;0;[.B4]^[.A26]*(2*SQRT([.B26])-[.B5]*[.B26]/[.C26]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C26]-[.B26]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="17"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E26]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C27]<=0;0;[.B4]^[.A27]*(2*SQRT([.B27])-[.B5]*[.B27]/[.C27]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C27]-[.B27]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="18"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E27]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C28]<=0;0;[.B4]^[.A28]*(2*SQRT([.B28])-[.B5]*[.B28]/[.C28]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C28]-[.B28]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="19"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E28]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C29]<=0;0;[.B4]^[.A29]*(2*SQRT([.B29])-[.B5]*[.B29]/[.C29]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C29]-[.B29]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="20"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E29]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C30]<=0;0;[.B4]^[.A30]*(2*SQRT([.B30])-[.B5]*[.B30]/[.C30]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C30]-[.B30]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="21"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E30]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C31]<=0;0;[.B4]^[.A31]*(2*SQRT([.B31])-[.B5]*[.B31]/[.C31]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C31]-[.B31]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="22"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E31]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C32]<=0;0;[.B4]^[.A32]*(2*SQRT([.B32])-[.B5]*[.B32]/[.C32]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C32]-[.B32]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="23"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E32]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C33]<=0;0;[.B4]^[.A33]*(2*SQRT([.B33])-[.B5]*[.B33]/[.C33]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C33]-[.B33]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="24"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E33]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C34]<=0;0;[.B4]^[.A34]*(2*SQRT([.B34])-[.B5]*[.B34]/[.C34]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C34]-[.B34]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="25"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E34]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C35]<=0;0;[.B4]^[.A35]*(2*SQRT([.B35])-[.B5]*[.B35]/[.C35]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C35]-[.B35]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="26"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E35]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C36]<=0;0;[.B4]^[.A36]*(2*SQRT([.B36])-[.B5]*[.B36]/[.C36]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C36]-[.B36]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="27"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E36]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C37]<=0;0;[.B4]^[.A37]*(2*SQRT([.B37])-[.B5]*[.B37]/[.C37]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C37]-[.B37]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="28"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E37]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C38]<=0;0;[.B4]^[.A38]*(2*SQRT([.B38])-[.B5]*[.B38]/[.C38]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C38]-[.B38]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="29"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E38]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C39]<=0;0;[.B4]^[.A39]*(2*SQRT([.B39])-[.B5]*[.B39]/[.C39]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C39]-[.B39]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="30"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E39]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C40]<=0;0;[.B4]^[.A40]*(2*SQRT([.B40])-[.B5]*[.B40]/[.C40]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C40]-[.B40]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="31"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E40]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C41]<=0;0;[.B4]^[.A41]*(2*SQRT([.B41])-[.B5]*[.B41]/[.C41]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C41]-[.B41]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="32"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E41]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C42]<=0;0;[.B4]^[.A42]*(2*SQRT([.B42])-[.B5]*[.B42]/[.C42]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C42]-[.B42]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="33"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E42]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C43]<=0;0;[.B4]^[.A43]*(2*SQRT([.B43])-[.B5]*[.B43]/[.C43]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C43]-[.B43]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="34"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E43]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C44]<=0;0;[.B4]^[.A44]*(2*SQRT([.B44])-[.B5]*[.B44]/[.C44]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C44]-[.B44]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="35"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E44]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C45]<=0;0;[.B4]^[.A45]*(2*SQRT([.B45])-[.B5]*[.B45]/[.C45]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C45]-[.B45]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="36"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E45]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C46]<=0;0;[.B4]^[.A46]*(2*SQRT([.B46])-[.B5]*[.B46]/[.C46]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C46]-[.B46]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="37"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E46]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C47]<=0;0;[.B4]^[.A47]*(2*SQRT([.B47])-[.B5]*[.B47]/[.C47]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C47]-[.B47]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="38"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E47]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C48]<=0;0;[.B4]^[.A48]*(2*SQRT([.B48])-[.B5]*[.B48]/[.C48]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C48]-[.B48]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="39"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E48]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C49]<=0;0;[.B4]^[.A49]*(2*SQRT([.B49])-[.B5]*[.B49]/[.C49]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C49]-[.B49]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="40"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E49]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C50]<=0;0;[.B4]^[.A50]*(2*SQRT([.B50])-[.B5]*[.B50]/[.C50]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C50]-[.B50]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="41"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E50]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C51]<=0;0;[.B4]^[.A51]*(2*SQRT([.B51])-[.B5]*[.B51]/[.C51]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C51]-[.B51]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="42"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E51]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C52]<=0;0;[.B4]^[.A52]*(2*SQRT([.B52])-[.B5]*[.B52]/[.C52]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C52]-[.B52]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="43"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E52]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C53]<=0;0;[.B4]^[.A53]*(2*SQRT([.B53])-[.B5]*[.B53]/[.C53]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C53]-[.B53]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="44"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E53]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C54]<=0;0;[.B4]^[.A54]*(2*SQRT([.B54])-[.B5]*[.B54]/[.C54]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C54]-[.B54]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="45"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E54]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C55]<=0;0;[.B4]^[.A55]*(2*SQRT([.B55])-[.B5]*[.B55]/[.C55]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C55]-[.B55]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="46"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E55]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C56]<=0;0;[.B4]^[.A56]*(2*SQRT([.B56])-[.B5]*[.B56]/[.C56]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C56]-[.B56]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="47"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E56]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C57]<=0;0;[.B4]^[.A57]*(2*SQRT([.B57])-[.B5]*[.B57]/[.C57]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C57]-[.B57]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="48"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E57]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C58]<=0;0;[.B4]^[.A58]*(2*SQRT([.B58])-[.B5]*[.B58]/[.C58]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C58]-[.B58]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="49"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E58]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C59]<=0;0;[.B4]^[.A59]*(2*SQRT([.B59])-[.B5]*[.B59]/[.C59]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C59]-[.B59]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="50"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E59]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C60]<=0;0;[.B4]^[.A60]*(2*SQRT([.B60])-[.B5]*[.B60]/[.C60]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C60]-[.B60]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="51"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E60]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C61]<=0;0;[.B4]^[.A61]*(2*SQRT([.B61])-[.B5]*[.B61]/[.C61]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C61]-[.B61]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="52"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E61]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C62]<=0;0;[.B4]^[.A62]*(2*SQRT([.B62])-[.B5]*[.B62]/[.C62]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C62]-[.B62]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="53"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E62]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C63]<=0;0;[.B4]^[.A63]*(2*SQRT([.B63])-[.B5]*[.B63]/[.C63]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C63]-[.B63]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="54"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E63]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C64]<=0;0;[.B4]^[.A64]*(2*SQRT([.B64])-[.B5]*[.B64]/[.C64]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C64]-[.B64]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="55"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E64]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C65]<=0;0;[.B4]^[.A65]*(2*SQRT([.B65])-[.B5]*[.B65]/[.C65]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C65]-[.B65]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="56"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E65]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C66]<=0;0;[.B4]^[.A66]*(2*SQRT([.B66])-[.B5]*[.B66]/[.C66]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C66]-[.B66]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="57"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E66]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C67]<=0;0;[.B4]^[.A67]*(2*SQRT([.B67])-[.B5]*[.B67]/[.C67]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C67]-[.B67]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="58"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E67]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C68]<=0;0;[.B4]^[.A68]*(2*SQRT([.B68])-[.B5]*[.B68]/[.C68]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C68]-[.B68]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="59"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E68]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C69]<=0;0;[.B4]^[.A69]*(2*SQRT([.B69])-[.B5]*[.B69]/[.C69]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C69]-[.B69]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="60"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E69]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C70]<=0;0;[.B4]^[.A70]*(2*SQRT([.B70])-[.B5]*[.B70]/[.C70]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C70]-[.B70]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="61"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E70]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C71]<=0;0;[.B4]^[.A71]*(2*SQRT([.B71])-[.B5]*[.B71]/[.C71]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C71]-[.B71]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="62"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E71]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C72]<=0;0;[.B4]^[.A72]*(2*SQRT([.B72])-[.B5]*[.B72]/[.C72]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C72]-[.B72]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="63"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E72]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C73]<=0;0;[.B4]^[.A73]*(2*SQRT([.B73])-[.B5]*[.B73]/[.C73]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C73]-[.B73]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="64"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E73]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C74]<=0;0;[.B4]^[.A74]*(2*SQRT([.B74])-[.B5]*[.B74]/[.C74]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C74]-[.B74]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="65"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E74]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C75]<=0;0;[.B4]^[.A75]*(2*SQRT([.B75])-[.B5]*[.B75]/[.C75]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C75]-[.B75]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="66"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E75]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C76]<=0;0;[.B4]^[.A76]*(2*SQRT([.B76])-[.B5]*[.B76]/[.C76]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C76]-[.B76]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="67"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E76]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C77]<=0;0;[.B4]^[.A77]*(2*SQRT([.B77])-[.B5]*[.B77]/[.C77]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C77]-[.B77]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="68"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E77]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C78]<=0;0;[.B4]^[.A78]*(2*SQRT([.B78])-[.B5]*[.B78]/[.C78]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C78]-[.B78]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="69"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E78]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C79]<=0;0;[.B4]^[.A79]*(2*SQRT([.B79])-[.B5]*[.B79]/[.C79]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C79]-[.B79]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="70"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E79]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C80]<=0;0;[.B4]^[.A80]*(2*SQRT([.B80])-[.B5]*[.B80]/[.C80]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C80]-[.B80]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="71"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E80]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C81]<=0;0;[.B4]^[.A81]*(2*SQRT([.B81])-[.B5]*[.B81]/[.C81]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C81]-[.B81]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="72"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E81]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C82]<=0;0;[.B4]^[.A82]*(2*SQRT([.B82])-[.B5]*[.B82]/[.C82]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C82]-[.B82]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="73"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E82]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C83]<=0;0;[.B4]^[.A83]*(2*SQRT([.B83])-[.B5]*[.B83]/[.C83]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C83]-[.B83]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="74"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E83]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C84]<=0;0;[.B4]^[.A84]*(2*SQRT([.B84])-[.B5]*[.B84]/[.C84]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C84]-[.B84]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="75"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E84]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C85]<=0;0;[.B4]^[.A85]*(2*SQRT([.B85])-[.B5]*[.B85]/[.C85]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C85]-[.B85]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="76"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E85]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C86]<=0;0;[.B4]^[.A86]*(2*SQRT([.B86])-[.B5]*[.B86]/[.C86]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C86]-[.B86]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="77"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E86]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C87]<=0;0;[.B4]^[.A87]*(2*SQRT([.B87])-[.B5]*[.B87]/[.C87]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C87]-[.B87]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="78"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E87]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C88]<=0;0;[.B4]^[.A88]*(2*SQRT([.B88])-[.B5]*[.B88]/[.C88]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C88]-[.B88]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="79"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E88]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C89]<=0;0;[.B4]^[.A89]*(2*SQRT([.B89])-[.B5]*[.B89]/[.C89]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C89]-[.B89]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="80"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E89]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C90]<=0;0;[.B4]^[.A90]*(2*SQRT([.B90])-[.B5]*[.B90]/[.C90]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C90]-[.B90]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="81"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E90]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C91]<=0;0;[.B4]^[.A91]*(2*SQRT([.B91])-[.B5]*[.B91]/[.C91]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C91]-[.B91]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="82"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E91]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C92]<=0;0;[.B4]^[.A92]*(2*SQRT([.B92])-[.B5]*[.B92]/[.C92]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C92]-[.B92]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="83"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E92]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C93]<=0;0;[.B4]^[.A93]*(2*SQRT([.B93])-[.B5]*[.B93]/[.C93]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C93]-[.B93]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="84"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E93]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C94]<=0;0;[.B4]^[.A94]*(2*SQRT([.B94])-[.B5]*[.B94]/[.C94]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C94]-[.B94]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="85"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E94]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C95]<=0;0;[.B4]^[.A95]*(2*SQRT([.B95])-[.B5]*[.B95]/[.C95]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C95]-[.B95]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="86"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E95]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C96]<=0;0;[.B4]^[.A96]*(2*SQRT([.B96])-[.B5]*[.B96]/[.C96]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C96]-[.B96]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="87"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E96]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C97]<=0;0;[.B4]^[.A97]*(2*SQRT([.B97])-[.B5]*[.B97]/[.C97]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C97]-[.B97]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="88"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E97]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C98]<=0;0;[.B4]^[.A98]*(2*SQRT([.B98])-[.B5]*[.B98]/[.C98]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C98]-[.B98]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="89"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E98]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C99]<=0;0;[.B4]^[.A99]*(2*SQRT([.B99])-[.B5]*[.B99]/[.C99]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C99]-[.B99]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="90"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E99]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C100]<=0;0;[.B4]^[.A100]*(2*SQRT([.B100])-[.B5]*[.B100]/[.C100]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C100]-[.B100]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="91"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E100]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C101]<=0;0;[.B4]^[.A101]*(2*SQRT([.B101])-[.B5]*[.B101]/[.C101]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C101]-[.B101]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="92"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E101]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C102]<=0;0;[.B4]^[.A102]*(2*SQRT([.B102])-[.B5]*[.B102]/[.C102]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C102]-[.B102]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="93"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E102]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C103]<=0;0;[.B4]^[.A103]*(2*SQRT([.B103])-[.B5]*[.B103]/[.C103]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C103]-[.B103]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="94"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E103]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C104]<=0;0;[.B4]^[.A104]*(2*SQRT([.B104])-[.B5]*[.B104]/[.C104]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C104]-[.B104]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="95"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E104]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C105]<=0;0;[.B4]^[.A105]*(2*SQRT([.B105])-[.B5]*[.B105]/[.C105]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C105]-[.B105]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="96"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E105]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C106]<=0;0;[.B4]^[.A106]*(2*SQRT([.B106])-[.B5]*[.B106]/[.C106]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C106]-[.B106]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="97"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E106]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C107]<=0;0;[.B4]^[.A107]*(2*SQRT([.B107])-[.B5]*[.B107]/[.C107]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C107]-[.B107]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="98"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E107]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C108]<=0;0;[.B4]^[.A108]*(2*SQRT([.B108])-[.B5]*[.B108]/[.C108]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C108]-[.B108]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
<table:table-row><table:table-cell office:value-type="float" office:value="99"/><table:table-cell office:value-type="float" office:value="0.5"/><table:table-cell table:formula="of:=[.E108]" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=IF([.C109]<=0;0;[.B4]^[.A109]*(2*SQRT([.B109])-[.B5]*[.B109]/[.C109]))" office:value-type="float" office:value="0"/><table:table-cell table:formula="of:=[.C109]-[.B109]" office:value-type="float" office:value="0"/></table:table-row>
|
||||
</table:table>
|
||||
</office:spreadsheet>
|
||||
</office:body>
|
||||
</office:document>
|
||||
@@ -16,7 +16,10 @@
|
||||
#include <com/sun/star/sheet/XSpreadsheet.hpp>
|
||||
#include <com/sun/star/container/XIndexAccess.hpp>
|
||||
#include <com/sun/star/table/XCell.hpp>
|
||||
#include <com/sun/star/lang/XComponent.hpp>
|
||||
#include <com/sun/star/beans/XPropertySet.hpp>
|
||||
#include <test/bootstrapfixture.hxx>
|
||||
#include <vector>
|
||||
|
||||
using namespace css;
|
||||
|
||||
@@ -31,6 +34,7 @@ class LpSolverTest: public test::BootstrapFixture
|
||||
void testSLPSolver();
|
||||
void testSLPSolverNonlinear();
|
||||
void testSLPSolverNonlinearConstraint();
|
||||
void testSLPSolverLargeModel();
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_COINMP
|
||||
@@ -47,6 +51,7 @@ public:
|
||||
CPPUNIT_TEST(testSLPSolver);
|
||||
CPPUNIT_TEST(testSLPSolverNonlinear);
|
||||
CPPUNIT_TEST(testSLPSolverNonlinearConstraint);
|
||||
CPPUNIT_TEST(testSLPSolverLargeModel);
|
||||
#endif
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
};
|
||||
@@ -170,6 +175,70 @@ void LpSolverTest::testSLPSolverNonlinearConstraint()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_COINMP
|
||||
// A large model (100-period resource depletion) that the swarm solver cannot
|
||||
// handle at all. This guards that the sequential linear solver loads it, stays
|
||||
// feasible, and improves the objective. Full convergence needs faster sampling
|
||||
// than is in place today, so the time limit is short and only progress is
|
||||
// checked.
|
||||
void LpSolverTest::testSLPSolverLargeModel()
|
||||
{
|
||||
OUString aUrl
|
||||
= m_directories.getURLFromSrc(u"/sc/qa/unit/data/solver/ResourceDepletion.fods"_ustr);
|
||||
uno::Reference<frame::XDesktop2> xLoader = frame::Desktop::create(m_xContext);
|
||||
uno::Reference<lang::XComponent> xComponent(xLoader->loadComponentFromURL(
|
||||
aUrl, u"_blank"_ustr, 0, uno::Sequence<css::beans::PropertyValue>()));
|
||||
uno::Reference<sheet::XSpreadsheetDocument> xDocument(xComponent, uno::UNO_QUERY_THROW);
|
||||
uno::Reference<container::XIndexAccess> xSheets(xDocument->getSheets(), uno::UNO_QUERY_THROW);
|
||||
uno::Reference<sheet::XSpreadsheet> xSheet(xSheets->getByIndex(0), uno::UNO_QUERY_THROW);
|
||||
|
||||
const table::CellAddress aObjective(0, 1, 6); // B7
|
||||
// objective value at the document's starting extraction path
|
||||
double fInitialObjective = xSheet->getCellByPosition(1, 6)->getValue();
|
||||
|
||||
std::vector<table::CellAddress> aVariableList;
|
||||
std::vector<sheet::SolverConstraint> aConstraintList;
|
||||
for (sal_Int32 nRow = 9; nRow < 109; ++nRow) // rows 10..109
|
||||
{
|
||||
aVariableList.push_back(table::CellAddress(0, 1, nRow)); // B: extraction
|
||||
aConstraintList.push_back({ table::CellAddress(0, 1, nRow),
|
||||
sheet::SolverConstraintOperator_GREATER_EQUAL, uno::Any(0.0) });
|
||||
// E: stock remaining after this period must not go negative
|
||||
aConstraintList.push_back({ table::CellAddress(0, 4, nRow),
|
||||
sheet::SolverConstraintOperator_GREATER_EQUAL, uno::Any(0.0) });
|
||||
}
|
||||
uno::Sequence<table::CellAddress> aVariables(aVariableList.data(), aVariableList.size());
|
||||
uno::Sequence<sheet::SolverConstraint> aConstraints(aConstraintList.data(),
|
||||
aConstraintList.size());
|
||||
|
||||
uno::Reference<sheet::XSolver> xSolver(
|
||||
m_xContext->getServiceManager()->createInstanceWithContext(
|
||||
u"com.sun.star.comp.Calc.SLPSolver"_ustr, m_xContext),
|
||||
uno::UNO_QUERY_THROW);
|
||||
uno::Reference<beans::XPropertySet> xProperties(xSolver, uno::UNO_QUERY_THROW);
|
||||
xProperties->setPropertyValue(u"Timeout"_ustr, uno::Any(sal_Int32(10)));
|
||||
|
||||
xSolver->setDocument(xDocument);
|
||||
xSolver->setObjective(aObjective);
|
||||
xSolver->setVariables(aVariables);
|
||||
xSolver->setConstraints(aConstraints);
|
||||
xSolver->setMaximize(true);
|
||||
|
||||
xSolver->solve();
|
||||
|
||||
CPPUNIT_ASSERT(xSolver->getSuccess());
|
||||
uno::Sequence<double> aSolution = xSolver->getSolution();
|
||||
CPPUNIT_ASSERT_EQUAL(aVariables.getLength(), aSolution.getLength());
|
||||
for (sal_Int32 i = 0; i < aSolution.getLength(); ++i)
|
||||
xSheet->getCellByPosition(1, 9 + i)->setValue(aSolution[i]);
|
||||
double fObjective = xSheet->getCellByPosition(1, 6)->getValue();
|
||||
CPPUNIT_ASSERT_MESSAGE("the solver must improve the objective on the large model",
|
||||
fObjective > fInitialObjective);
|
||||
|
||||
xComponent->dispose();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_COINMP
|
||||
void LpSolverTest::testSolver(OUString const & rName)
|
||||
{
|
||||
|
||||
@@ -365,7 +365,9 @@ void SAL_CALL SLPSolver::solve()
|
||||
constexpr double fStepTolerance = 1.0e-7;
|
||||
constexpr double fMinPredictedReduction = 1.0e-12;
|
||||
constexpr double fDefaultTimeout = 100.0;
|
||||
constexpr sal_Int32 nMaxIterations = 200;
|
||||
// High safety limit only. The time budget and the convergence test below
|
||||
// are what normally end the loop, so a large model is not cut off early.
|
||||
constexpr sal_Int32 nMaxIterations = 100000;
|
||||
|
||||
double fTrust = fInitialTrust;
|
||||
double fMerit = meritAt(aX, fPenalty);
|
||||
|
||||
Reference in New Issue
Block a user